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

一、目的: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个人主页-哔哩哔哩视频

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

es的检索-DSL语法和Java-RestClient实现

基本语法&#xff1a; GET /索引库名/_search {"query": {"查询类型": {"查询条件"}} }RestClient的导入在RestClient操作索引库和文档有介绍 查询所有&#xff1a; # 查询所有 GET /test/_search {"query": {"match_all"…

Go 三色标记法:一种高效的垃圾回收策略

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

2024年6月计算机视觉论文推荐:扩散模型、视觉语言模型、视频生成等

6月还有一周就要结束了&#xff0c;我们今天来总结2024年6月上半月发表的最重要的论文&#xff0c;重点介绍了计算机视觉领域的最新研究和进展。 Diffusion Models 1、Autoregressive Model Beats Diffusion: Llama for Scalable Image Generation LlamaGen&#xff0c;是一个…

学习VXLAN -- 报文结构、原理和配置

目录 VXLAN背景什么是VXLANVXLAN的优势VXLAN报文结构一些特定名词BDVBDIFVAPVSIVSI-InterfaceAC VXLAN的实现原理图VXLAN MAC地址表项MAC地址动态学习 VXLAN隧道VXLAN隧道工作模式L2 GatewayIP Gateway VXLAN隧道的建立与关联VXLAN隧道建立的方式VXLAN对到与VXLAN关联的方式 配…

搭建大型分布式服务(四十一)SpringBoot 整合多个kafka数据源-支持亿级消息生产者

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

PD虚拟机和VMware有什么区别?PD虚拟机和VMware谁更好用?

随着电脑硬件设备的飞快发展&#xff0c;一些高端的技术已经不再遥不可及&#xff0c;比如虚拟化&#xff0c;虚拟机技术已经成为IT领域和个人用户不可或缺的工具。特别是PD虚拟机&#xff08;Parallels Desktop&#xff09;和VMware&#xff0c;作为市场上两个主流的虚拟机软件…

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

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

本地离线模型搭建指南-本地运行显卡选择

搭建一个本地中文大语言模型&#xff08;LLM&#xff09;涉及多个关键步骤&#xff0c;从选择模型底座&#xff0c;到运行机器和框架&#xff0c;再到具体的架构实现和训练方式。以下是一个详细的指南&#xff0c;帮助你从零开始构建和运行一个中文大语言模型。 本地离线模型搭…

WordPress视频主题Qinmei 2.0

WordPress视频主题Qinmei 2.0&#xff0c;简单漂亮的WP视频站源码 主题功能 可以根据豆瓣ID直接获取到其他详细信息&#xff0c;省去慢慢填写的痛苦&#xff1b;播放器支持直链&#xff0c;解析&#xff0c;m3u8格式&#xff0c;同时解析可匹配正则自动更改&#xff1b;新增动…

独立看门狗窗口开门狗

独立看门狗 接线图&#xff1a;按键用于阻塞喂狗。独立看门狗&窗口开门狗接线一样。 第一步&#xff0c;是开启时钟了&#xff0c;只有这个LSI时钟开启了独立看门狗才能运行&#xff0c;所以初始化独立看门狗之前&#xff0c;LSI必须得开启&#xff0c;但是这个开启LSI的…

【机器学习300问】128、简述什么Word2Vec?

一、一句话说明Word2Vec是什么&#xff1f; Word2Vec是一种常见的词嵌入技术。Word2Vec的目标是将每个词表示为一个向量&#xff0c;使得这些向量能够反映出词语之间的相似性和关联性。 word2vec算法通过预测中心词和上下文词的共现概率来学习词向量&#xff0c;能够捕捉词语之…

WordPress软件下载主题Inpandora

Inpandora&#xff08;中文名为潘多拉&#xff09;是一款基于软件下载站定制的WordPress主题&#xff0c;帮助站长使用WordPress快速搭建一个专业的WordPress软件博客。Inpandora这款WordPress主题可以说是因软件而生&#xff0c;从UI设计到后台设置功能&#xff0c;都充分体现…

高德地图轨迹回放/轨迹播放

前言 本篇文章主要介绍高德地图的轨迹回放或播放的实现过程&#xff0c;是基于vue2实现的功能&#xff0c;同时做一些改动也是能够适配vue3的。其中播放条是用的是element UI中的el-slider组件&#xff0c;包括使用到的图标也是element UI自带的。可以实现轨迹的播放、暂停、停…

导入别人的net文件报红问题sdk

1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件&#xff0c;右键打开&#xff0c;直接修改版本为本机的SDK版本&#xff0c;就可以用了

【STM32】STM32通过I2C实现温湿度采集与显示

目录 一、I2C总线通信协议 1.I2C通信特征 2.I2C总线协议 3.软件I2C和硬件I2C 二、stm32通过I2C实现温湿度&#xff08;AHT20&#xff09;采集 1.stm32cube配置 RCC配置&#xff1a; SYS配置&#xff1a; I2C1配置&#xff1a; USART1配置&#xff1a; GPIO配置&#…

智慧校园综合管理系统的优点有哪些

在当今这个信息化飞速发展的时代&#xff0c;智慧校园综合管理系统正逐步成为教育领域的一股革新力量&#xff0c;它悄然改变着我们对传统校园管理的认知。这套系统如同一个无形的桥梁&#xff0c;将先进的信息技术与学校的日常运作紧密相连&#xff0c;展现出多维度的优势。 …

网络技术原理需要解决的5个问题

解决世界上任意两台设备时如何通讯的&#xff1f;&#xff1f; 第一个问题&#xff0c;pc1和pc3是怎么通讯的&#xff1f; 这俩属于同一个网段&#xff0c;那么同网段的是怎么通讯的&#xff1f; pc1和pc2属于不同的网段&#xff0c;第二个问题&#xff0c;不同网段的设备是…

国企:2024年6月中国移动相关招聘信息 二

在线营销服务中心-中国移动通信有限公司在线营销服务中心 硬件工程师 工作地点:河南省-郑州市 发布时间 :2024-06-18 截至时间: 2024-06-30 学历要求:本科及以上 招聘人数:1人 工作经验:3年 岗位描述 1.负责公司拾音器等音视频智能硬件产品全过程管理,包括但…

【Java】Java基础语法

一、注释详解 1.1 注释的语法&#xff1a; // 单行注释/*多行注释 *//**文档注释 */ 1.2 注释的特点&#xff1a; 注释不影响程序的执行&#xff0c;在Javac命令进行编译后会将注释去掉 1.3 注释的快捷键 二、字面量详解 2.1 字面量的概念&#xff1a; 计算机是用来处理…

干货 | 2024生成式AI产业落地路径研究报告(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 2024生成式AI产业落地路径研究报告 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;诚挚邀请您微信扫描以下二维码加入方案驿站知识星球&#xff0c;…