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

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


二、实现效果

浅色 

 深色 

三、环境


VS2022 Net7

四、使用方式

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

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

<RibbonWindowx: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><RibbonTitle="文件"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"><GridWidth="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.mzph.cn/news/858145.shtml

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

相关文章

【漏洞复现】AJ-Report开源数据大屏 verification;swagger-ui RCE漏洞

0x01 产品简介 AJ-Report是一个完全开源的B平台&#xff0c;酷炫大屏展示&#xff0c;能随时随地掌控业务动态&#xff0c;让每个决策都有数据支撑。多数据源支持&#xff0c;内置mysql、elasticsearch、kudu等多种驱动&#xff0c;支持自定义数据集省去数据接口开发&#xff…

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

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

Python的pip切换国内源

&#x1f4da;目录 起因&#xff1a;pip切换国内源&#xff1a;操作永久修改pip配置文件测试永久源配置是否成功 pip其他环境的配置永久源配置 起因&#xff1a; pyCharm安装模块的手出现ModuleNotFoundError: No module named distutils 由于使用pip install distutils下载不了…

[图解]建模相关的基础知识-16

1 00:00:00,350 --> 00:00:04,130 刚才那个&#xff0c;就相当于&#xff0c;12这个我们可以认为是什么 2 00:00:05,020 --> 00:00:11,360 我们用类图来表达就是&#xff0c;员工、电话 3 00:00:13,320 --> 00:00:15,080 多个 4 00:00:15,090 --> 00:00:16,440 …

Python与Java实现SM2互调

文章目录 一、项目背景二、环境极其依赖三、具体功能1.Python生成密钥对2.java生成密钥对3.Python加签验签4.java加签验签 四、遇到的问题五、解决方案 一、项目背景 Python对接Java接口互相SM2加签验签 二、环境极其依赖 python环境 pip3 install gmssljava环境 <depen…

100多个ChatGPT指令提示词分享

当前&#xff0c;ChatGPT几乎已经占领了整个互联网。全球范围内成千上万的用户正使用这款人工智能驱动的聊天机器人来满足各种需求。然而&#xff0c;并不是每个人都知道如何充分有效地利用ChatGPT的潜力。其实有许多令人惊叹的ChatGPT指令提示词&#xff0c;可以提升您与ChatG…

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

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

【大数据 复习】第3章 分布式文件系统HDFS(重中之重)

一、概念 1.分布式文件系统把文件分布存储到多个计算机节点上&#xff0c;通过网络实现、文件在多台主机上进行分布式存储的文件系统。&#xff08;就是你的电脑存a&#xff0c;我的电脑存pple&#xff09; 2.降低了硬件开销: 与之前使用多个处理器和专用高级硬件的并行化处理装…

pytest测试框架flaky插件重试失败用例

Pytest提供了丰富的插件来扩展其功能&#xff0c;本章介绍下插件flaky &#xff0c;用于在测试用例失败时自动重新运行这些测试用例。与前面文章介绍的插件pytest-rerunfailures功能有些类似&#xff0c;但是功能上不如pytest-rerunfailures插件丰富。 flaky官方并没有明确pyt…

git stash Pop 后丢失,要如何找回?

文章目录 须知背景描述解决过程 须知 写在前面&#xff1a;我们都知道 stash list 中如果 pop 出来一条&#xff0c;那 list 里就会少一条&#xff0c;但其实使用 git stash pop 并没有真正地将该条 stash 删掉的&#xff0c;而是删除引用而已&#xff0c;因此当我们误 pop 时…

AI在软件开发中的应用

AI在软件开发中的应用可以帮助开发人员更高效地编写和测试代码&#xff0c;并提高软件的质量和性能。它能够帮助加快软件的部署和维护过程&#xff0c;提供更好的开发体验。 编码辅助 帮助开发人员更快地编写代码。例如&#xff0c;AI可以识别代码中的语法错误&#xff0c;并提…

WSL+Anconda(pytorch深度学习)环境配置

动机 最近在读point cloud相关论文&#xff0c;准备拉github上相应的code跑一下&#xff0c;但是之前没有深度学习的经验&#xff0c;在配置环境方面踩了超级多的坑&#xff0c;依次来记录一下。 一开始我直接将code拉到了windows本地来运行&#xff0c;遇到了数不清的问题&a…

LoRaWAN网关源代码分析(基础概念篇)

目录 一、简介 1、lora_gateway 2、packet_forwarder 二、目录结构 1、lora_gateway 2、packet_forwarder 一、简介 LoRaWAN网关的实现主要依赖两个源代码&#xff1a;lora_gateway和packet_forwarder。接下来&#xff0c;我们将从分析源代码入手&#xff0c;移植LoRaWAN源…

ThinkPHP:查询数据库数据之后,更改查询数据的字段名称

一、原始查询数据 含有字段item_no&#xff0c;lot_num&#xff0c;position $data[brushed] db::table(wip_station_transaction) ->where([wip_entity_name>$wip_entity_name,line_code>$line_code,]) ->field([item_no, lot_num, position]) ->select(); …

DAC测试实验——FPGA学习笔记7

一、DAC简介 DAC全称Digital to Analog Converter&#xff0c;即数模转换器。它用于将主控芯片产生的数字值(0和1)转换为模拟值(电压值)。 1、DAC参数指标 2、DAC类型 常用的DAC可大致分为权电阻网络DAC、T型电阻网络DAC、倒T型电阻网络DAC以及权电流型DAC。 3、AD9708/3PD9…

Linux - 记一次某Java程序启动报错(申请内存失败)

文章目录 问题可能原因分析可能原因分析尝试各种解决方案尝试解决过程 解决办法&#xff1a; 调整 overcommit_meory参数overcommit_memory详解什么是 overcommit_memory&#xff1f;overcommit_memory 的选项及其含义配置 overcommit_memory查看当前设置设置 overcommit_memor…

github-chinese,跟英文GitHub说拜拜

背景 对于我们程序员来说,Github是一个常逛的web网站,里面学习资源众多,不管是查问题还是查资料都离不开他。 但是Github作为一个国际化的网站,语言主要是英语,所以对于一些英语似懂非懂的同学来说还是有一些难处。 想过找一个国内中文的Github作为一个平替网站,但是资…

访问网站时IP被屏蔽是什么原因?

在互联网使用中&#xff0c;有时我们可能会遇到访问某个网站时IP地址被屏蔽的情况。IP地址被网站屏蔽是一个相对常见的现象&#xff0c;而导致这种情况的原因多种多样&#xff0c;包括恶意行为、违规访问等。本文将解释IP地址被网站屏蔽的常见原因&#xff0c;同时&#xff0c;…

Day 30:100346. 使二进制数组全部等于1的最小操作次数Ⅱ

Leetcode 100346. 使二进制数组全部等于1的最小操作次数Ⅱ 给你一个二进制数组 nums 。 你可以对数组执行以下操作 任意 次&#xff08;也可以 0 次&#xff09;&#xff1a; 选择数组中 任意 一个下标 i &#xff0c;并将从下标 i 开始一直到数组末尾 所有 元素 反转 。 反转 …

平面设计软件PS/AI/ID/CDR怎么选怎么下载(附教程)

随着设计行业的普遍化&#xff0c;平面设计软件也越来越多且功能越来越强大。平面设计软件需要在电脑上运行使用&#xff0c;来进行平面画面、平面文字的设计工作。如大家所了解的&#xff0c;Adobe Photoshop、Adobe Illustrator、CorelDRAW、Adobe InDesign是平面设计中最常用…