一、获取默认的控件模板

WPF修改控件模板是修改外观最方便的方式,但是会出现不知道原来的控件的模板长什么样,或者如何在原有控件模板上修改的,下面就分享了获取某控件默认控件模板的方法(以控件Button为例):

1、创建一个Button

2、在界面上选择Button,右键->编辑模板->编辑副本 ,就可以在XAML中看到自动生成的原始的控件模板代码

3、可以在默认模板上修改其中的一些属性,并运行查看修改效果

这样在生成的默认控件模板上,修改需要修改的部分即可,可以大大减少工作量,也提高了容错率。默认情况下,所有的模板和样式都放在主界面的XAML中,代码量会很多、很乱,我们可以使用单独的资源词典来存放这些模板和样式,主界面只要根据Key调用即可。

二、资源字典的使用

1、选中项目右键->添加->新建项->资源词典(WPF)

生成的初始资源词典如下:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:TemplateDemo">
</ResourceDictionary>

现在可以将模板和样式作为资源分流到各个资源词典中了。我们现在演示将Button的默认模板转移至该控件模板

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:TemplateDemo"><ResourceDictionary.MergedDictionaries><ResourceDictionary><Style x:Key="FocusVisual"><Setter Property="Control.Template"><Setter.Value><ControlTemplate><Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/></ControlTemplate></Setter.Value></Setter></Style><SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/><SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/><SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/><SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/><SolidColorBrush x:Key="Button.Pressed.Background" Color="#FFC4E5F6"/><SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B"/><SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4"/><SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5"/><SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383"/><Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"><Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/><Setter Property="Background" Value="{StaticResource Button.Static.Background}"/><Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/><Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/><Setter Property="BorderThickness" Value="1"/><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="VerticalContentAlignment" Value="Center"/><Setter Property="Padding" Value="1"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type Button}"><StackPanel><Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true"><ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/></Border></StackPanel><ControlTemplate.Triggers><Trigger Property="IsDefaulted" Value="true"><Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/></Trigger><Trigger Property="IsMouseOver" Value="true"><Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/><Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/></Trigger><Trigger Property="IsPressed" Value="true"><Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/><Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/></Trigger><Trigger Property="IsEnabled" Value="false"><Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/><Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/><Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></ResourceDictionary></ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

2、要使用该资源字典还需要在App.Xaml中进行声明,我的名称叫TemplateDictionary.xaml,需要保证其命名空间一致

 <Application.Resources><ResourceDictionary Source="TemplateDictionary.xaml"></ResourceDictionary></Application.Resources>

3、在主XAML中使用StaticResource或DynamicResource进行静态或动态引用即可

<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="309,286,0,0" VerticalAlignment="Top" Width="75" Style="{StaticResource ButtonStyle1}"/>

以上就是关于获取默认空间模板和使用资源词典的一些简单的介绍,结合起来使用可以搭建简洁方便的代码布局

【转】WPF默认控件模板的获取和资源词典的使用相关推荐

  1. wpf slider 控件模板

    暂时没时间整理,先把连接写下 http://blog.csdn.net/tcjiaan/article/details/6997900 动画控制 http://developer.51cto.com/ ...

  2. WPF:从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转

    欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ] 由于上周主要做了项目组产品架构.给公司新员工培训以及其他会议等事情,在OpenExpressApp对建 ...

  3. wpf 对控件进行截图,获取快照

    有时候我们项目,在执行某个操作后,会生成一些数据结果,如报表一类的东西,我们需要对结果进行保存,甚至是生成word文档. 那么首先获取到控件快照就最基本的条件. 生成快照的静态方法类 using Sy ...

  4. WPf控件模板缺省样式

    WPF控件模板缺省样式:http://www.cnblogs.com/khler/archive/2009/07/14/1523043.html 转载于:https://www.cnblogs.com ...

  5. 转载 WPF 控件模板 数据模板 面板模板

    转载自:https://blog.csdn.net/ceasadan/article/details/61414879 模板使用方式:首先定义模板,然后在把对应的key应用到控件对应的属性中: 属性对 ...

  6. Windows Phone开发(16):样式和控件模板

    在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的一种可重用的属性设置列表,这样对于需要设置相同属性值的同类型的 ...

  7. Windows Phone开发(16):样式和控件模板 转:http://blog.csdn.net/tcjiaan/article/details/7367260...

    在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的一种可重用的属性设置列表,这样对于需要设置相同属性值的同类型的 ...

  8. WPF(一) WPF基本控件与布局

    ​ WPF(Windows Presentation Foundation)是微软推出的基于Windows的用户界面框架,中文译为"Windows呈现基础",属于.NET Fram ...

  9. OxyPlot.Wpf 图表控件使用备忘

    OxyPlot.Wpf 图表控件使用备忘 目录 OxyPlot.Wpf 图表控件使用备忘 一.OxyPlot.Wpf 控件信息 二.基本概念 (一) PlotView 和 Plot (二) PlotM ...

最新文章

  1. 办公word,ppt,excel问题
  2. Go语言源码分析CAS的实现和Java如出一辙
  3. c语言程序连接后扩展名为,C语言程序经过编译、连接后生成的可执行文件的扩展名是...
  4. 【NLP】Task3:特征选择
  5. ar面部识别_国内手机厂商AR布局报告
  6. nt6启动菜单自动修复工具_轻量级windows系统修复,清理工具——Dism++
  7. 组合数学 —— 概述
  8. informix(南大通用)sql语法的差异
  9. bzoj 1121: [POI2008]激光发射器SZK
  10. Android] AndroidManifest.xml文件解析
  11. 国家制图标准适用于手工制图和计算机制图,机械制图国家标准与计算机绘图
  12. MATLAB 软件安装与无法打开问题
  13. mysql函数返回结果集_MySQL自定义函数
  14. [源码和文档分享]基于Android的家庭学校联系平台APP开发与实现
  15. 介绍一种养眼的IDEA/Pycharm/Clion配色方案
  16. 关于DCT变换、DCT反变换、分块DCT变换
  17. vue显示格式化的json
  18. python提取一段字符串中的ip地址
  19. 【机器学习】iris莺尾花项目-机器学习的hello world
  20. java多线程提交,如何按照时间顺序获取线程结果,看完你就懂了 | Java工具类

热门文章

  1. 【软件开发底层知识修炼】二十七 C/C++中的指针与数组是不同的
  2. Java弱引用(WeakReference)的理解与使用
  3. Python标准异常总结
  4. spring的基本用法
  5. Android 开发笔记___drawable
  6. Java学习二:Javac Java的学习(原创)
  7. 【转】 ADO.NET最佳实践
  8. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第51篇]什么是基于ID的加密的安全模型,描述一个IBE方案
  9. [Leedcode][JAVA][第42题][动态规划][双指针][栈]
  10. 西北民族大学c语言程序设计复试科目,2016年西北民族大学中国民族信息技术研究院962C语言程序设计复试笔试仿真模拟题...