示例:推荐一个自定义的Ribbon皮肤

news2025/3/1 21:00:32

一、目的:WPF自带的Ribbon控件功能很强大,但使用过程中感觉显示的样式不是很好,或者不适合自己的项目,下面介绍一个基于自带Ribbon控件样式的修改,主要修改了些高度,间距,背景色,前景色等参数,同时引入了自己的皮肤库资源,可以切换皮肤,字体,布局等资源更改显示效果


二、实现效果

浅色 

 深色 

三、环境


VS2022 Net7

四、使用方式

1、安装nuget包:H.Modules.Messages.Dialog

2、修改MainWindow(这部分跟自带Ribbon的使用方式相同) ,需要注意的是增加RibbonWindow的Style:Style="{DynamicResource {x:Static h:RibbonWindowKeys.Default}}"

<RibbonWindow
    x:Class="H.Test.Ribbon.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:h="https://github.com/HeBianGu"
    xmlns:local="clr-namespace:H.Test.Ribbon"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:system="clr-namespace:System;assembly=mscorlib"
    Title="ShellWindow"
    Width="1100"
    Height="700"
    Style="{DynamicResource {x:Static h:RibbonWindowKeys.Default}}"
    WindowStartupLocation="CenterScreen"
    mc:Ignorable="d">
    <DockPanel>
        <Ribbon
            Title="文件"
            DockPanel.Dock="Top"
            Visibility="Visible">
            <Ribbon.ApplicationMenu>
                <RibbonApplicationMenu Label="文件" SmallImageSource="logo.png">
                    <RibbonApplicationMenu.AuxiliaryPaneContent>
                        <TabControl>
                            <TabControl.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Header}" />
                                </DataTemplate>
                            </TabControl.ItemTemplate>
                            <TabItem Header="Header1">
                                <Grid
                                    Width="600"
                                    Height="600"
                                    Background="Transparent" />
                            </TabItem>
                            <TabItem Header="Header1" />
                            <TabItem Header="Header1" />
                            <TabItem Header="Header1" />
                        </TabControl>
                    </RibbonApplicationMenu.AuxiliaryPaneContent>
                    <RibbonApplicationMenuItem Header="开始" />
                    <RibbonApplicationMenuItem Header="开始">
                        <RibbonApplicationMenuItem Header="开始" />
                        <RibbonApplicationMenuItem Header="开始" />
                        <RibbonApplicationMenuItem Header="开始" />
                        <RibbonApplicationMenuItem Header="开始">
                            <RibbonApplicationMenuItem Header="开始" />
                            <RibbonApplicationMenuItem Header="开始" />
                            <RibbonApplicationMenuItem Header="开始" />
                            <RibbonApplicationMenuItem Header="开始" />
                        </RibbonApplicationMenuItem>
                    </RibbonApplicationMenuItem>
                    <RibbonApplicationMenuItem Header="开始" />
                    <RibbonApplicationMenuItem Header="开始" />
                    <RibbonApplicationMenuItem Header="开始" />
                </RibbonApplicationMenu>
            </Ribbon.ApplicationMenu>
            <Ribbon.QuickAccessToolBar>
                <RibbonQuickAccessToolBar>
                    <RibbonButton />
                    <RibbonButton />
                    <RibbonButton />
                    <RibbonButton />
                    <RibbonButton />
                    <RibbonMenuButton>
                        <RibbonMenuButton.ControlSizeDefinition>
                            <RibbonControlSizeDefinition ImageSize="Small" IsLabelVisible="True" />
                        </RibbonMenuButton.ControlSizeDefinition>
                        <RibbonSplitMenuItem StaysOpenOnClick="True">
                            <RibbonMenuItem Header="ss" />
                            <RibbonMenuItem />
                            <RibbonMenuItem />
                            <RibbonMenuItem />
                            <RibbonMenuItem />
                            <RibbonMenuItem />
                        </RibbonSplitMenuItem>
                        <RibbonMenuItem />
                        <RibbonMenuItem />
                        <RibbonMenuItem />
                        <RibbonMenuItem />
                        <RibbonMenuItem />
                    </RibbonMenuButton>
                    <RibbonButton />
                </RibbonQuickAccessToolBar>
            </Ribbon.QuickAccessToolBar>
            <RibbonTab Header="开始">
                <RibbonGroup Header="Button">
                    <RibbonButton />
                    <RibbonButton />
                    <RibbonButton />
                </RibbonGroup>

                <RibbonGroup Header="CheckBox">
                    <RibbonCheckBox />
                </RibbonGroup>

                <RibbonGroup Header="SplitButton">
                    <RibbonSplitButton>
                        <RibbonMenuItem Header="放大" />
                        <RibbonMenuItem Header="放大" />
                        <RibbonMenuItem Header="放大" />
                        <RibbonMenuItem Header="放大" />
                        <RibbonMenuItem Header="放大" />
                        <RibbonMenuItem Header="放大" />
                    </RibbonSplitButton>
                </RibbonGroup>

                <RibbonGroup Header="ComboBox">
                    <RibbonComboBox>
                        <system:String>1</system:String>
                        <system:String>1</system:String>
                        <system:String>1</system:String>
                        <system:String>1</system:String>
                    </RibbonComboBox>

                    <RibbonSeparator />
                </RibbonGroup>

                <RibbonGroup Header="TextBox">
                    <RibbonTextBox />
                </RibbonGroup>

                <RibbonGroup Header="ToggleButton">
                    <RibbonToggleButton />
                </RibbonGroup>

            </RibbonTab>

            <RibbonTab Header="插入">
                <RibbonGroup Header="剪贴板">
                    <RibbonToggleButton />
                </RibbonGroup>
                <RibbonGroup Header="Button">
                    <RibbonGroup.GroupSizeDefinitions>
                        <RibbonGroupSizeDefinition>
                            <RibbonControlSizeDefinition ImageSize="Large" />
                        </RibbonGroupSizeDefinition>
                        <RibbonGroupSizeDefinition IsCollapsed="True" />
                    </RibbonGroup.GroupSizeDefinitions>
                    <RibbonButton Label="Ribbon Button">
                        <RibbonButton.ControlSizeDefinition>
                            <RibbonControlSizeDefinition ImageSize="Large" IsLabelVisible="True" />
                        </RibbonButton.ControlSizeDefinition>
                        &gt;
                    </RibbonButton>
                    <RibbonButton Label="Ribbon Button">
                        <RibbonButton.ControlSizeDefinition>
                            <RibbonControlSizeDefinition ImageSize="Large" IsLabelVisible="True" />
                        </RibbonButton.ControlSizeDefinition>
                        &gt;
                    </RibbonButton>
                    <RibbonButton Label="Ribbon Button">
                        <RibbonButton.ControlSizeDefinition>
                            <RibbonControlSizeDefinition ImageSize="Large" IsLabelVisible="True" />
                        </RibbonButton.ControlSizeDefinition>
                        &gt;
                    </RibbonButton>
                    <RibbonButton Label="Ribbon Button">
                        <RibbonButton.ControlSizeDefinition>
                            <RibbonControlSizeDefinition ImageSize="Large" IsLabelVisible="True" />
                        </RibbonButton.ControlSizeDefinition>
                        &gt;
                    </RibbonButton>
                    <RibbonButton Label="Ribbon Button">
                        <RibbonButton.ControlSizeDefinition>
                            <RibbonControlSizeDefinition ImageSize="Large" IsLabelVisible="True" />
                        </RibbonButton.ControlSizeDefinition>
                        &gt;
                    </RibbonButton>
                    <RibbonButton Label="Ribbon Button">
                        <RibbonButton.ControlSizeDefinition>
                            <RibbonControlSizeDefinition ImageSize="Large" IsLabelVisible="True" />
                        </RibbonButton.ControlSizeDefinition>
                        &gt;
                    </RibbonButton>
                    <RibbonButton Label="Ribbon Button">
                        <RibbonButton.ControlSizeDefinition>
                            <RibbonControlSizeDefinition ImageSize="Large" IsLabelVisible="True" />
                        </RibbonButton.ControlSizeDefinition>
                        &gt;
                    </RibbonButton>
                    <RibbonButton Label="Ribbon Button">
                        <RibbonButton.ControlSizeDefinition>
                            <RibbonControlSizeDefinition ImageSize="Large" IsLabelVisible="True" />
                        </RibbonButton.ControlSizeDefinition>
                        &gt;
                    </RibbonButton>
                </RibbonGroup>
            </RibbonTab>

            <RibbonTab Header="设计">
                <RibbonGroup Header="剪贴板">
                    <RibbonButton Content="复制" />
                    <RibbonCheckBox Content="自动保存" />
                    <RibbonComboBox Text="1">
                        <system:String>1</system:String>
                        <system:String>1</system:String>
                        <system:String>1</system:String>
                        <system:String>1</system:String>
                    </RibbonComboBox>

                    <RibbonSplitButton />
                    <RibbonRadioButton />
                    <RibbonSeparator />
                    <RibbonTextBox />
                    <RibbonToggleButton />
                </RibbonGroup>
            </RibbonTab>

            <RibbonTab Header="布局">
                <RibbonGroup Header="剪贴板">
                    <RibbonButton Content="复制" />
                    <RibbonCheckBox Content="自动保存" />
                    <RibbonComboBox Text="1">
                        <system:String>1</system:String>
                        <system:String>1</system:String>
                        <system:String>1</system:String>
                        <system:String>1</system:String>
                    </RibbonComboBox>

                    <RibbonSplitButton />
                    <RibbonRadioButton />
                    <RibbonSeparator />
                    <RibbonTextBox />
                    <RibbonToggleButton />
                </RibbonGroup>
            </RibbonTab>

            <RibbonTab Header="布局">
                <RibbonGroup Header="剪贴板" />
                <RibbonControlGroup>
                    <RibbonButton Content="复制" />
                    <RibbonButton Content="复制" />
                </RibbonControlGroup>

            </RibbonTab>
        </Ribbon>
        <Button Content="按钮" />
    </DockPanel>
</RibbonWindow>

3,引用样式资源

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/H.Windows.Ribbon;component/Default.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

 上面步骤完成后可以看到Ribbon的样式已修改

五、需要了解的知识点

 Ribbon 类 (System.Windows.Controls.Ribbon) | Microsoft Learn

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1853495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

借助ChatGPT降低学术论文重复率,使用技巧全攻略,实用有效,快速上手

大家好&#xff0c;感谢关注。我是七哥&#xff0c;一个在高校里不务正业&#xff0c;折腾学术科研AI实操的学术人。可以&#xff08;yida985&#xff09;交流学术写作或ChatGPT等AI领域相关问题&#xff0c;多多交流&#xff0c;相互成就&#xff0c;共同进步。 经常有学术同…

文心智能体平台介绍和应用:制作你的智能体(运维小帮手)

这是我自己制作的智能体 大家可以了解一下&#xff01; 运维小帮手&#xff01;https://mbd.baidu.com/ma/s/tE19dqvr 文心智能体平台官网首页 点击跳转&#xff01;https://agents.baidu.com/ 什么是智能体平台&#xff1f; 文心智能体平台&#xff08;Wenxin Intelligen…

【Leetcode】520. 检测大写字母

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517;我们定义&#xff0c;在以下情况时&#xff0c;单词的大写用法是正确的&#xff1a; 全部字母都是大写&#xff0c;比如 “USA” 。单词中所有字母都不是大写&#xff0c;比如 “le…

腾讯云[HiFlow】| 自动化 -------HiFlow:还在复制粘贴?

文章目录 前言&#xff1a;一&#xff1a;HiFlow是什么二&#xff1a;功能介绍1.全连接2.自动化2.1定时处理特定任务2.2实时同步变更信息2.3及时获取通知提醒 3.零代码4.多场景5.可信赖 三&#xff1a;用户体验最后 前言&#xff1a; 随着网络时代的不断发展&#xff0c;自动化…

java内置线程池

线程池常见方法 如何获取线程池对象 缓存线程池 自定义任务对象 public class MyRunnable implements Runnable{private int id;public MyRunnable(int id) {this.id id;}Overridepublic void run() {String name Thread.currentThread().getName();System.out.println(&quo…

文心一言 VS 讯飞星火 VS chatgpt (287)-- 算法导论21.2 6题

六、假设对 UNION 过程做一个简单的改动&#xff0c;在采用链表表示中拿掉让集合对象的 tail 指针总指向每个表的最后一个对象的要求。无论是使用还是不使用加权合并启发式策略&#xff0c;这个修改不应该改变 UNION 过程的渐近运行时间。(提示:而不是把一个表链接到另一个表后…

VC++支持断点续下或续传的功能

VC使用多线程和Socket实现断点续下 一、断点续下的基本原理&#xff1a; 1.断点续传的理解可以分为两部分&#xff1a;一部分是断点&#xff0c;一部分是续传。断点的由来是在下载过程中&#xff0c;将一个下载文件分成了多个部分&#xff0c;同时进行多个部分一起的下载&…

智能优化算法改进策略之局部搜索算子(四)--梯度搜索法

2、仿真实验 以海洋捕食者算法&#xff08;MPA&#xff09;为基本算法。考察基于梯度搜索的改进海洋捕食者算法&#xff08;命名为GBSMPA&#xff09; vs. 海洋捕食者算法&#xff08;MPA&#xff09; 在Sphere函数上的比较 在Penalized1函数上的比较 在CEC2017-1上的比较 在C…

cuda与cudnn下载(tensorflow-gpu)

目录 前言 正文 前言 &#xff01;&#xff01;&#xff01;tensorflow-gpu的版本要与cuda与cudnn想对应。这点十分重要&#xff01;推荐下载较新的。即tensorflow-gpu2.60及以上&#xff0c;cuda11.x及以上&#xff0c;cudnn8.x及以上。 所以&#xff0c;下载之前先检查好…

朱啸虎:五年后大模型公司很难独立存在,核心不在技术,而是寻找尖刀式场景

人工智能时代&#xff0c;AI赛道如何投&#xff1f; 6月21日&#xff0c;金沙江创投合伙人朱啸虎在“创投十年”高峰论坛上&#xff0c;分享了以“扬鞭奋蹄正当时”为主题的演讲&#xff0c;聚焦创投行业当前的新形势和新变化作出分享。 要点如下&#xff1a; 1、今天一级市…

计算机网络之奇偶校验码和CRC冗余校验码

今天我们来看看有关于计算机网络的知识——奇偶校验码和CRC冗余校验码&#xff0c;这两种检测编码的方式相信大家在计算机组成原理当中也有所耳闻&#xff0c;所以今天我就来跟大家分享有关他们的知识。 奇偶校验码 奇偶校验码是通过增加冗余位使得码字中1的个数恒为奇数或偶数…

示例:推荐一个应用Adorner做的通知和提示消息对话框

一、目的&#xff1a;在开发过程中&#xff0c;增加一些提示消息可以很好的提高用户体验&#xff0c;下面介绍一个用于增加提示消息的库 二、效果如下 可以看到右侧顶端弹出提示消息&#xff0c;消息间隔3s自动退出 三、环境 VS2022 Net7 四、使用方式 安装nuget包&#xff…

什么是APP分发-了解APP分发的核心概念

APP分发的定义和意义 大家有没有过这样的经历&#xff1a;辛辛苦苦开发了一款APP&#xff0c;却不知道该怎么让更多人知道和使用&#xff1f;APP分发的重要性就凸显出来了。APP分发就是将你的应用推送到不同的应用市场和平台&#xff0c;让更多用户能够下载和使用。 小猪app封…

智能优化算法改进策略之局部搜索算子(七)--自适应模式搜索法

1、原理介绍 模式搜索法[1]是Hooke与Jeeves提出的一种直接搜索算法&#xff0c;其目的是通过比较目标函数在有限点集中的函数值来优化目标函数。更重要的是&#xff0c;它不仅不使用任何导数知识&#xff0c;而且不需要隐式地建立任何一种导数近似。 在这种直接搜索技术中&…

C++学习合集

#整理到一块&#xff0c;方便查东西&#xff0c;顺便补充一些之前没有学习到的东西# 变量 char--1字节 short--2字节 int-4字节 long--4字节 long long(int)--8字节&#xff1b;准确来说变量的大小取决于编译器&#xff0c;1字节8个二进制位&#xff0c;其中最高位为符号位…

C语言---自定义类型:结构体

结构体回顾 结构体 自定义的类型&#xff1a;结构体、联合体、枚举 结构是一些值的集合&#xff0c;这些值成为成员变量&#xff0c;结构的每个成员可以是不同类型的变量 //描述一本书&#xff1a;书名、作者、定价、书号//结构体类型---类似于整型、浮点型 struct Book {c…

操作系统真象还原:用户进程

第11章-用户进程 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 11.1 为什么要有任务状态TSS Linux 任务切换未采用 Intel 的做法&#xff0c;而是用了一套自己的方法&#xff0c;只是用了 TSS 的一小部分功能。 操作系统最直接控制的就是 CPU&…

茴香豆的使用

RAG RAG 模型的核心在于两大部分&#xff1a;检索器&#xff08;Retriever&#xff09;和生成器&#xff08;Generator&#xff09;。检索器的作用是从一个庞大的数据集中&#xff0c;根据输入的问题或者提示&#xff0c;快速有效地检索出最相关的信息或文档。这一步骤通常利用…

[面试题]Jenkins

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…

Java基础(二)——数组,方法,方法重载

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…