原文:
WPF XAML 资源样式模板属性存放位置
WPF的XAML 资源申明 类似HTML。
整体来说分3种
1.行类资源样式属性
1.1 行内属性
<Button Content="按钮" Foreground="White" FontSize="30"></Button>
1.2 行内样式 模板(没多大意义)
<Button Content="按钮"> <Button.Style> <Style TargetType="Button"> <Setter Property="Foreground" Value="White"></Setter> <Setter Property="FontSize" Value="30"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid></Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </Button.Style> <Button.Template> <ControlTemplate TargetType="Button"> <Grid></Grid> </ControlTemplate> </Button.Template> </Button>
2.头部资源样式属性
2.1 头部样式模板 (申明)
<Window.Resources> <Style x:Key="xxx" TargetType="Button"> <Setter Property="Foreground" Value="White"></Setter> <Setter Property="FontSize" Value="30"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid></Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <ControlTemplate x:Key="xx" TargetType="Button"> <Grid></Grid> </ControlTemplate> </Window.Resources>
2.2 头部样式模板 (引用)
<Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Dictionary.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources>
3.全局资源样式属性
App.xaml
<Application.Resources> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Dictionary.xaml"/> </ResourceDictionary.MergedDictionaries>
<Style x:Key="xxx" TargetType="Button"> <Setter Property="Foreground" Value="White"></Setter> <Setter Property="FontSize" Value="30"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid></Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <ControlTemplate x:Key="xx" TargetType="Button"> <Grid></Grid> </ControlTemplate> </ResourceDictionary> </Application.Resources>
!!!!!!!!!!!!!!配合资源字典的使用!!!!!!!!!
说明:
1.行类属性尽量少用,只有特殊控件 需要用到行内属性,
正确的做法是封装统一风格的所有控件。
(例如按钮,统一高宽,字体,字体大小,然后申明到独立的资源字典中,
在App.xaml中引用)
2.头部资源引用情况用于 不同 Window 适应不同主题或者风格的情况。
比如为某一个窗口申明一个当前窗口单独使用的样式。
(例如播放器的旋转控件,只有一个页面用到,只需要在Window级引用对应资源字典)
不放在App.xaml原因是为了降低内存消耗。
3.App.xaml 里面的资源引用适用于全局资源。理论上每一个被申明的Window
都会创建一个对应资源字典的实例。除非是每个Window都会用到的模块,
不然建议放到对应Window级