Dav*_*vid 8 wpf xaml templates styles
自从我开始使用MS的控件模板示例作为构建自定义控件的基础以来,我一直在想这个.
以Label示例为例:http://msdn.microsoft.com/en-us/library/ms752327.aspx
为什么它的定义如下:
<Style x:Key="{x:Type Label}" TargetType="Label">
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="VerticalContentAlignment" Value="Top" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<Border>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="True" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{DynamicResource DisabledForegroundColor}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
而不是直接这样:
<ControlTemplate x:Key="{x:Type Label}" TargetType="Label">
<Border>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="True" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{DynamicResource DisabledForegroundColor}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
然后直接调用模板而不是通过样式属性?
是否有一个隐藏的原因,我没有看到做这样的事情?或者它只是一种做事方式,就是这样吗?
(注意:不要告诉我这是因为水平和垂直对齐设置器!我们都知道这些是标签的默认值,如果保留这些值,这基本上没用)
如果不使用样式,则无法自动将模板分配给特定控件类型的所有实例.x:Key="{x:Type Label}"控件模板的设置不会自动将此模板应用于Label类型的所有控件.
您可以通过设置TargetTypeto来将样式应用于可视化树中声明下方的所有按钮Button,但如果不将其包含在具有模板Setter的Style中, 则不能对模板执行相同操作.
另请注意,在您的示例中,您可以进行交换
<Style x:Key="{x:Type Label}" TargetType="Label">
Run Code Online (Sandbox Code Playgroud)
同
<Style TargetType="Label">
Run Code Online (Sandbox Code Playgroud)
由于x:Key被设定为TargetType如果x:Key省略定义.
| 归档时间: |
|
| 查看次数: |
8000 次 |
| 最近记录: |