示例:推荐一个自定义的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…

Spring Cloud Ribbon 介绍

目录 一、Spring Cloud Ribbon简介二、Ribbon 负载均衡策略三、Ribbon 加载机制四、Ribbon的工作原理五、Ribbon的配置和使用六、Ribbon的作用和优势 一、Spring Cloud Ribbon简介 Spring Cloud Ribbon是一个基于Netflix Ribbon实现的客户端负载均衡器。它运行在消费者端&…

什么是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…

docker的隔离机制

linux内核带来的便利 Linux 内核是 Docker 实现隔离的基础。作为操作系统的核心,Linux 内核提供了许多用于资源隔离和安全性的关键机制,为 Docker 容器化技术提供了基础支持。 Namespaces Linux 内核自 2.6.24 版本开始引入了命名空间(Namespaces)机制。Namespaces 为进程提…

数据库的ACID是通过什么保证的

1、原子性&#xff08;Atomicity&#xff09; 通过日志&#xff08;Logging&#xff09;来记录所有对数据库的修改。如果事务中的某个操作失败&#xff0c;系统可以回滚&#xff08;Rollback&#xff09;到事务开始前的状态&#xff0c;撤销所有已执行的修改。 使用写前日志&…

100多个ChatGPT指令提示词分享

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

MySQL中的case表达式

case 表达式 & case 语句 假如我们有一张表名为 employees &#xff0c;如下所示&#xff1a; -------------------------------------------------------------------------------- | employee_id | first_name | last_name | department_id | salary | hire_date | g…

Linux Ubuntu 24.04制作可用systemctl操控的service

在/etc/systemd/system/目录下创建一个新的<your_service_name>.service文件&#xff0c;例如buda.service&#xff0c;里面填入以下内容&#xff1a; (特别要注意设置WorkingDirectory, 这将决定exe程序中的相对路径的解析结果。) [Unit] Descriptionbuda website ser…

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

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

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

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

YOLOv8中是如何实现类似将结构体作为函数参数传递

YOLOv8中是如何实现类似将结构体作为函数参数传递 flyfish 实现类似将结构体作为函数参数传递可以有多种方式 可以使用类&#xff08;class&#xff09;来定义一个类似结构体&#xff08;struct&#xff09;的数据结构&#xff0c;然后将其作为函数参数传递 class MyStruct…

CLIP-ReID代码解读七——model.py上

Bottleneck模块 首先定义了一个名为 Bottleneck 的 PyTorch 模块&#xff0c;它是 ResNet 架构中的一个瓶颈块&#xff08;Bottleneck Block&#xff09;。瓶颈块是 ResNet 中常用的一种层次结构&#xff0c;用于构建更深的网络。以下是对这段代码的详细注释&#xff1a; 类定…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-30`Kaggle`竞赛:图片分类

30Kaggle竞赛&#xff1a;图片分类 **比赛链接&#xff1a;**https://www.kaggle.com/c/classify-leaves 导入包 import torch import torchvision from torch.utils.data import Dataset, DataLoader from torchvision import transforms import numpy as np import pandas…

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

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

【FFmpeg】AVCodecContext结构体

【FFmpeg】AVCodecContext结构体 1. AVCodecContext的定义1.1 struct AVCodecInternal *internal1.1.1 struct FramePool *pool 参考&#xff1a; FFMPEG结构体分析&#xff1a;AVCodecContext 示例工程&#xff1a; 【FFmpeg】调用ffmpeg库实现264软编 【FFmpeg】调用ffmpeg库…

SSM框架 --- SpringMVC --- exercise1

1.创建Maven项目 2.导入依赖&#xff08;导入SpringMvc与Servlet的坐标&#xff09;&#xff1a; <dependencies> <!--servlet依赖的坐标--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId&…

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

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