6
自从我开始使用MS的控件模板示例作为构建自定义控件的基础之后,我一直在想这一点。为什么在xaml,WPF中的样式中定义模板?
采取标签例子如: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>
并没有直接像这样:
<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>
然后叫作为模板直接,而不是通过样式属性?
有没有隐藏的原因,我没有看到做这样的事情?还是只是一种做事的方式,就是这样?
(NB!不要告诉我这是由于水平和垂直对齐制定者,我们都知道这些都是一个标签的默认值,这是基本没用,如果你让那些值)
oy,虽然它对模板和样式的工作方式相同。我会尽我所能去亲眼看到它(我无法相信这两种行为会有所不同......)至于你答案的第二部分,我不得不不同意(你在这个问题上看到了我的另一个问题) 。仍然没有找到一个有效的解释,我得到的行为,但删除x:键并不总是工作,因为它应该(至少对我来说)... – David 2011-02-02 09:22:32