当前位置: 首页 > news >正文

WPF Style样式 全局样式资源字典

在WPF(Windows Presentation Foundation)中,样式(Style)是一种强大的机制,允许开发者定义一组属性值,并将这些属性值应用于一个或多个控件。样式可以简化XAML标记,并使UI的外观和行为更加一致。样式通常在XAML文件的Resources部分中声明,并可以隐式或显式地应用于控件。

 <!--1、将样式注册为资源--><Window.Resources><!--使用Style类创建一个资源--><!--TargetType:设置当前的样式是应用于哪个控件的, 将会自动设置所有的Label控件使用这组样式--><Style TargetType="Label"><!--在Style中使用Setter控件设置属性--><Setter Property="FontSize" Value="22"/><Setter Property="Foreground" Value="Green"/><!--<Setter Property="Background"><Setter.Value><ImageBrush ImageSource="https://cn.bing.com/th?id=OVFT.dKjW5DKpKzHHiUMwN1np1i"/></Setter.Value></Setter>--></Style><!--如果一个样式拥有Key属性,这个样式不会应用到所有的控件,只会应用到显示使用他的控件--><Style TargetType="Button"x:Key="btn"><Setter Property="Background" Value="red"/><Setter Property="FontWeight" Value="Bold"/></Style>
 <!--当为Style添加Key属性之后,使用这个样式的控件将不会应用默认的样式了--><!--可以使用 BasedOn 属性,让一个Style继承另一个Style,来完成扩展--><!--这个例子中继承了默认的TextBox样式,因为默认样式没有Key属性,因此只能通过类型找到继承关系--><Style TargetType="TextBox" x:Key="yellowTB"BasedOn="{StaticResource {x:Type TextBox}}"> <Setter Property="Background" Value="#ffff00"/></Style>

继承上一个样式  BasedOn

 <!--如果要继承的目标样式拥有Key属性,则可以直接使用对应的名字进行继承--><Style TargetType="TextBox"x:Key="boldTb"BasedOn="{StaticResource yellowTB}"><Setter Property="FontWeight" Value="Bold"/></Style>

如果要将一个样式应用于不同类型的控件,则需要为他们找到一个公共的基类 FrameworkElement

以上就是一些样式简单的案列 在当前window下定义的样式只会作用于当前的window 当我们需要大量的控件样式 而且其他窗体也需要使用相同的样式 为了方便就需要创建资源字典 邮件项目 添加资源字典  首先可以将上面在 Window 中定义的样式直接剪切ResourceDictionary中。不要复制 <Window.Resources>了,因为现在是给全局的样式下定义,而非仅对于Window中的按钮

<ResourceDictionary xmlns="http://..."xmlns:x="http://..."><Style TargetType="Button"><Setter Property="Height" Value="50"/><Setter Property="Width" Value="200"/><Setter Property="FontSize" Value="15"/><Setter Property="Margin" Value="10"/></Style><Style x:Key="LoginStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"><Setter Property="Background" Value="Blue"/></Style><Style x:Key="QuitStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"><Setter Property="Background" Value="Red"/></Style><Style x:Key="Forgetstyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"><Setter Property="Background" Value="Yellow"/></Style>
</ResourceDictionary>

接下来还需要在app.xaml中用上全局样式名.xaml

打开app.xaml,在<Application.Resources>标签中写入

<ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="/你的项目名称;component/资源文件的相对路径"/></ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

完整如下

<Application x:Class="WPF.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WPF_Study"StartupUri="MainWindow.xaml"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="/WPF/ButtomStyle.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>

注意,这里输入的是相对路径。如果这里的资源文件BaseButtomStyle.xaml是放在某个子文件夹下的,那么就应该改成

<ResourceDictionary Source="/WPF/子文件夹/ButtomStyle.xaml"/>

至此,在任何界面中都可以访问到ButtomStyle.xaml中定义的样式。访问方法与之前的局部样式无异

总结

定义局部样式

在需要的窗口的<Window>标签之后添加如下样式定义。

不定义x:Key,则为默认属性。

定义了x:Key,则需要显式地在控件中引用。

定义全局样式

在合适的地方建立资源字典文件:右键项目,添加,资源字典。

http://www.lryc.cn/news/573304.html

相关文章:

  • 获取 DOM 与 nextTick:Vue 中的 DOM 操作
  • CTF--PhP Web解题(走入CTF)
  • 增量学习ASAP的源码剖析:如何实现人形的运动追踪和全身控制(核心涉及HumanoidVerse中的agents模块)
  • Redis集群部署终极指南:架构选型、生产部署与深度优化
  • 人形机器人_双足行走动力学:本田机械腿的倒立摆模型
  • rt-thread中使用usb官方自带的驱动问题记录
  • 【全开源】填表问卷统计预约打卡表单系统+uniapp前端
  • 基于FPGA的白噪声信号发生器verilog实现,包含testbench和开发板硬件测试
  • 基于物联网的智能饮水机系统设计
  • API网关Apisix管理接口速查
  • STM32 CAN简介及帧格式
  • AR眼镜与3D建模社区建设
  • 3D可视化数字孪生智能服务平台-物联网智控节能控、管、维一体化技术架构
  • RA4M2开发IOT(0)----安装e² studio
  • QVariant详解与属性访问
  • 【设计模式】3.装饰模式
  • 算法导论第二十四章 深度学习前沿:从序列建模到创造式AI
  • MySQL之InnoDB存储引擎深度解析
  • 深度剖析 PACK_SESSIONID 实现原理与安全突破机制
  • 【环境配置】在Ubuntu Server上安装5090 PyTorch环境
  • Kubernetes控制平面组件:Kubelet详解(八):容器存储接口 CSI
  • 项目中后端如何处理异常?
  • 数据分析实操篇:京东淘宝商品实时数据获取与分析
  • Python 的内置函数 hash
  • NVIDIA cuFFTDx文档笔记
  • 资产设备管理系统,Java + Vue,移动端+后台管理,实现设备全生命周期信息精准管控与高效运维
  • Windows/Linux系统 Ollama部署deepseek 大模型
  • 面试题-定义一个函数入参数是any类型,返回值是string类型,如何写出这个函数,代码示例
  • 跨标签页通信(三):Web Storage
  • C# WPF常用调试工具汇总