第17章 控件模版(5)——组织模版资源概述
来源:互联网 发布:淘宝宝贝上架怎么操作 编辑:程序博客网 时间:2024/06/06 07:40
①为避免多次定义模板,可在Application类的Resources集合中定义模板资源。然而,一个应用程序只能有一个App.xaml文件和一个Application.Resources集合。因此,在单独资源字典中定义模板是一个更好的主意。这样,可灵活地在特定窗口或在整个应用程序中使用资源。而且还可以结合样式使用,因为任何应用程序都可以包含多个资源字典。
②虽然可将所有模板组合到单个资源字典文件中,但富有经验的开发人员更愿意为每个控件模板创建单独的资源字典。这因为控件模板可能很快会变得过于复杂,并可能需要使用其他相关资源。将他们保存在一个单独的地方,并与其他控件相隔离,是一种很好的组织方式。
③当完善或扩展控件模板时,可发现其中封装了大量的不同细节,包括特定的形状、几何图形和画刷。从您的模板中提取这些细节并将他们定义为单独的资源是一个好主意。一个原因是通过该步骤,可以更方便地在一组相关的控件中重用这些画刷。例如,您可能会决定创建使用相同颜色的自定义Button、CheckBox和RadioButton控件。为了使该工作更加容易,可为画刷(Brushes.xaml)创建一个单独的资源字典,并将该资源字典合并到每个控件(如Button.xaml、CheckBox.xaml和RadioButton.xaml)的资源字典中。
④为了查看这种技术的工作情况,我们查看按钮自带的模板资源。要特别注意一点:资源必须先定义再使用。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:ButtonTemplate" xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"> <Style x:Key="ButtonFocusVisual"> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <Rectangle StrokeDashArray="1 2" StrokeThickness="1" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" SnapsToDevicePixels="true" Margin="2"/> </ControlTemplate> </Setter.Value> </Setter> </Style> <LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0"> <GradientStop Color="#F3F3F3" Offset="0"/> <GradientStop Color="#EBEBEB" Offset="0.5"/> <GradientStop Color="#DDDDDD" Offset="0.5"/> <GradientStop Color="#CDCDCD" Offset="1"/> </LinearGradientBrush> <SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/> <Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"> <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/> <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/> <Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> <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}"> <Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" RenderDefaulted="{TemplateBinding IsDefaulted}" SnapsToDevicePixels="true"> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </Themes:ButtonChrome> <ControlTemplate.Triggers> <Trigger Property="IsKeyboardFocused" Value="true"> <Setter Property="RenderDefaulted" TargetName="Chrome" Value="true"/> </Trigger> <Trigger Property="ToggleButton.IsChecked" Value="true"> <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Foreground" Value="#ADADAD"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style></ResourceDictionary>
0 0
- 第17章 控件模版(5)——组织模版资源概述
- 第17章 控件模版(2)——模版绑定
- 第17章 控件模版(1)——模版的创建与使用
- 第17章 控件模版(6)——通过样式应用模版
- 第17章 控件模版(7)——通过样式自动应用模版
- 第17章 控件模版(3)——属性触发器
- 第17章 控件模版(4)——事件触发器
- 第17章 控件模版(8)——动态换肤
- 模版——函数模版、类模版
- 模版资源
- C++——模版:函数模版
- C++——模版:类模版
- 【C++ Primer】第16章 模版与泛型模版
- 模版—素数表
- 模版
- 模版
- 模版
- 模版
- vim项目管理插件project
- 关于java中的类的路径
- HTML九九乘法表的灵活应用
- 获取屏幕宽度
- iOS如何修改插件
- 第17章 控件模版(5)——组织模版资源概述
- 剑指offer笔记_第一章
- 1015. Reversible Primes (20)
- 自定义tabBar
- timeline组件实现切换、播放等操作
- 理解scanf,getchar
- 脱壳_esp定律操作
- javascript基础:window对象内置对话框、模式和非模式对话框、传值方法
- Unity性能要点参考标准