wpf基础

在 WPF (Windows Presentation Foundation) 中,Style 是一种强大的资源,允许你定义一组属性值,这些值可以被多个控件实例共享。使用 Style 可以减少重复的 XAML 代码,并且使得 UI 的一致性和可维护性得到提高。

以下是一些 Style 的基本概念和用法:

定义 Style

你可以在 XAML 中的 ResourceDictionary 里定义 Style

<Window.Resources><Style x:Key="ButtonStyle" TargetType="Button"><Setter Property="Background" Value="Blue"/><Setter Property="Foreground" Value="White"/><Setter Property="FontSize" Value="16"/><!-- 可以添加更多的 Setter --></Style>
</Window.Resources>

应用 Style

一旦定义了 Style,你可以在控件上通过 Style 属性引用它:

​
<Button Content="Click Me" Style="{StaticResource ButtonStyle}" />

基于触发器的样式

Style 也可以包含触发器,例如 EventTriggerDataTrigger,来响应事件或数据变化:

<Style x:Key="ButtonStyle" TargetType="Button"><Setter Property="Background" Value="Blue"/><Setter Property="Foreground" Value="White"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Background" Value="DarkBlue"/></Trigger></Style.Triggers>
</Style>

样式继承

你可以基于现有样式创建新样式,并添加或覆盖设置:

<Style x:Key="SpecialButtonStyle" BasedOn="{StaticResource ButtonStyle}" TargetType="Button"><Setter Property="Content" Value="Special"/><!-- 可以添加更多的 Setter 或 Triggers -->
</Style>

资源嵌套

Style 可以定义在资源字典中,并在不同的资源字典之间共享:

<ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="SharedStyles.xaml"/></ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

动态资源

在 XAML 中,你可以使用动态资源来引用可能在运行时更改的样式:

<Button Content="Click Me" Style="{DynamicResource ButtonStyle}" />

使用动态资源允许样式在不重新编译应用程序的情况下更改。

样式作用域

样式的作用域限制在定义它们的 ResourceDictionary 中,除非你将它们提升到应用程序级别:

<Application.Resources><Style x:Key="GlobalButtonStyle" TargetType="Button"><!-- 全局样式定义 --></Style>
</Application.Resources>

样式和模板

样式可以与控件模板结合使用,以提供更复杂的自定义外观:

<Style x:Key="CustomListBoxStyle" TargetType="ListBox"><Setter Property="Template"><Setter.Value><!-- 定义自定义模板 --></Setter.Value></Setter>
</Style>

样式和绑定

样式可以包含绑定,以响应数据上下文中的变化:

<Style x:Key="DataBoundButtonStyle" TargetType="Button"><Setter Property="Content" Value="{Binding ButtonText}"/>
</Style>

使用 Style 可以大大减少 XAML 代码的冗余,并且使得 UI 的定制和维护变得更加容易。通过合理地使用样式,你可以创建一个既一致又灵活的用户界面。

没有用style之前

用了style之后可以修改更加方便

元素的属性值永远是最高的

Setter

Setter 是一个定义在 StyleTemplate 中的元素,用于设置属性的值。Setter 可以用于设置控件的属性值,如背景色、文本颜色、字体大小等,也可以用于绑定数据或触发条件性设置。

Setter中常用的属性
  1. Background

  • 设置控件的背景颜色或背景画刷。

​
<Setter Property="Background" Value="Blue"/>
  1. Foreground

  • 设置控件的前景色,如文本颜色。

​
<Setter Property="Foreground" Value="White"/>
  1. FontFamily

  • 设置控件使用的字体族。

​
<Setter Property="FontFamily" Value="Segoe UI"/>
  1. FontSize

  • 设置控件使用的字体大小。

​
<Setter Property="FontSize" Value="14"/>
  1. FontStyle

  • 设置控件的字体风格(如斜体)。

​
<Setter Property="FontStyle" Value="Italic"/>
  1. FontWeight

  • 设置控件的字体粗细。

​
<Setter Property="FontWeight" Value="Bold"/>
  1. Padding

  • 设置控件内部的填充。

​
<Setter Property="Padding" Value="10"/>
  1. Margin

  • 设置控件外部的边距。

​
<Setter Property="Margin" Value="5"/>
  1. BorderThickness

  • 设置控件边框的厚度。

​
<Setter Property="BorderThickness" Value="2"/>
  1. BorderBrush

- 设置控件边框的颜色。
​
<Setter Property="BorderBrush" Value="Black"/>
  1. Width

- 设置控件的宽度。
​
<Setter Property="Width" Value="100"/>
  1. Height

- 设置控件的高度。
​
<Setter Property="Height" Value="50"/>
  1. HorizontalAlignment

- 设置控件的水平对齐方式。
​
<Setter Property="HorizontalAlignment" Value="Center"/>
  1. VerticalAlignment

- 设置控件的垂直对齐方式。
​
<Setter Property="VerticalAlignment" Value="Center"/>
  1. Visibility

- 设置控件的可见性。
​
<Setter Property="Visibility" Value="Visible"/>
  1. IsEnabled

- 设置控件是否启用。
​
<Setter Property="IsEnabled" Value="True"/>
  1. Content

- 设置控件的内容。
​
<Setter Property="Content" Value="Hello World"/>
  1. ToolTip

- 设置控件的鼠标悬停提示。
​
<Setter Property="ToolTip" Value="This is a tooltip"/>

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

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

相关文章

IP地址专用SSL/https证书——10分钟签发

一般常用的SSL证书多为域名型SSL证书&#xff0c;即需要提供准确的域名。如果不能提供域名&#xff0c;只能提供IP地址&#xff0c;则需要一种特殊的SSL证书——IP地址证书。下面是IP地址证书的申请教程 IP地址专用SSL证书获取链接https://www.joyssl.com/certificate/select/…

vscode+git解决远程分支合并冲突

1&#xff09;远程分支和远程分支不复杂情况合并 例如readme的冲突 可直接在github上解决 删到只剩下 #supergenius002 合并冲突测试1/合并测试冲突1合并测试冲突2/合并测试冲突2就行 《《《/》》》也要删掉 2&#xff09;但如果是复杂的冲突&#xff0c;让我们回到vscod…

SpringMVC源码解析(二):请求执行流程

SpringMVC源码系列文章 SpringMVC源码解析(一)&#xff1a;web容器启动流程 SpringMVC源码解析(二)&#xff1a;请求执行流程 目录 前言DispatcherServlet入口一、获取HandlerExcutionChain(包括Handler)1、获取Handler1.1、通过request获取查找路径1.2、通过查找路径获取Han…

c++修炼之路之STL_map,set

目录 一&#xff1a;序列式容器与键值对 二&#xff1a;set与multiset 三&#xff1a;map与multimap 接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗-----------林辞忧 一&#xff1a;序列式容器与键值对 1.在初阶阶段&#xff0c;我们已经接触过S…

Vue基础2

1.监视属性 先推荐大家安装第一个vscode常用插件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>天气案例_监视简写</title><!-- 引入Vue --><script type"text/javascript"…

Linux操作系统常用命令总结

1、网络配置查看 要想知道网络的配置状态&#xff0c;我们可以使用ifconfig 或者 ip命令来查看。 这两个命令功能都差不多&#xff0c;不过它们属于不同的软件包&#xff0c;ifconfig属于net-tools软件包&#xff0c;ip属于iproute2软件包&#xff0c;通过查资料&#xff0c;…

【全栈实战】大模型自学:从入门到实战打怪升级,20W字总结(二)

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本栏讲解【全栈实战】大模型自学&#xff1a;从入门到实战打怪升级。 &#x1f514;专栏持续更新&#xff0c;适合人群&#xff1a;本科生、研究生、大模型爱好者&#xff0c;期…

【通俗理解】涌现现象与神经网络——从结构到智能的飞跃

【通俗理解】涌现现象与神经网络——从结构到智能的飞跃 涌现现象的类比 你可以把涌现现象比作一个“魔法锅”&#xff0c;锅里的各种原料&#xff08;内在结构和相互作用&#xff09;在特定的条件下相互作用&#xff0c;最终“熬制”出令人惊叹的“魔法汤”&#xff08;整体性…

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

系列篇章&#x1f4a5; No.文章1【Qwen部署实战】探索Qwen-7B-Chat&#xff1a;阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验&#xff1a;用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B&#xff1a;通过FastApi框架实现API的部署与调用4【Q…

无线融合,智能协同:ECWAN打造物联网高效协同网络

关键词&#xff1a;资产管理、ECWAN、无线混合组网、用电监测、用电计量、广域基站、计量插座、边缘协同 在当今快速发展的物联网领域&#xff0c;每天都有数以亿计的设备互相通信&#xff0c;形成庞大而复杂的网络生态。在这样的背景下&#xff0c;ECWAN技术以其灵活、高效和智…

Biorhythms(牛客)

由题意可以知 CRT模板即可 #include<iostream> using namespace std; typedef long long ll; const int N19; ll a[N],b[N],m[N],invm[N]; ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x1,y0;return a;}ll dexgcd(b,a%b,y,x);y-a/b*x;return d; } void solve(){for…

《动手做科研 》| 03. 如何阅读人工智能研究论文

地址链接:《动手做科研》03. 如何阅读人工智能研究论文 导读: 在刚迈入科研时&#xff0c;人人都说读论文很重要&#xff0c;但是很少有人能完整地教你应该如何读论文。论文不仅揭示了行业的最新进展和趋势&#xff0c;而且为我们提供了改进技术和解决复杂问题的思路。然而&…

《学会 SpringBoot · 参数校验》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

经纬恒润天津研发中心实验室荣获CNAS权威认证

近日&#xff0c;经纬恒润天津研发中心实验室成功通过中国合格评定国家认可委员会(CNAS)的严格扩项评审&#xff0c;正式被授予CNAS认可证书。此次认证&#xff0c;是经纬恒润实验室在原有CNAS实验室基础上&#xff0c;再添天津研发中心这一重要检测阵地&#xff0c;是对经纬恒…

重生奇迹MU自由选择个性大师之路

自由选择大师技能 每一个大师职业都拥有三条大师技能树&#xff0c;每一条大师技能树对职业加强的侧重点各不相同。玩家可以根据自己喜欢专一选择&#xff0c;一条路走到底&#xff1b;当然也可以同时兼修两条或者三条技能树&#xff0c;做到雨露均沾。每一种选择都没有绝对的…

【linux】Linux中环境变量相关操作的详细教程及实战案例

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

实验2-3-2 计算摄氏温度

//实验2-3-2 计算摄氏温度#include<stdio.h> int main(){int C, F;scanf("%d",&F);C5*(F-32)/9;printf("Celsius %d",C);}

kafka leader选举过程浅析

文章目录 概要核心概念leader选举具体流程小结 概要 kafka我们都知道它是通过副本机制&#xff0c;来支持负载均衡和故障转移等高可用的&#xff0c;那么具体副本的选举过程你了解吗&#xff1f;下面我们一起来学习下吧&#xff01; 核心概念 Controller定义&#xff1a;是特…

文献综述如何帮助研究人员避免现有研究的重复

VersaBot一键生成文献综述 进行良好的文献综述可以作为研究人员的有力工具&#xff0c;避免在多个方面重复现有研究&#xff1b; 1.揭示现有知识&#xff1a; 通过努力探索过去的研究&#xff0c;研究人员可以全面了解其领域中已经探索和建立的内容。这些知识使他们能够确定真…

Linux基础操作(下)

软件安装&#xff0c;CentOS系统和Ubuntu是使用不同的包管理器 CentOS使用yum管理器&#xff0c;Ubuntu使用apt管理器 在CentOS系统中&#xff0c;使用yum命令联网管理软件安装 yum语法: yum [-y] [install | remove | search ] 软件名称 在Ubuntu系统中&#xff0c;使用apt命…