我在写一个WPF控件,它的子类是一个Button。我再提供主题\ generic.xaml默认样式,看起来像这样(简化):WPF ControlTemplate:如何为TemplateBinding提供默认值?
<Style TargetType="{x:Type WPFControls:MyButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type WPFControls:MyButton}">
<Button
x:Name="PART_Button"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我想用户必须改变控件的背景下的机会,但如果他没有,我想提供默认值。我该怎么做?除非用户明确指定它们(这有效地强制用户总是提供一些值),但是标准的Windows控件(如Button)不会显示在背景和BorderBrush中(不存在)提供默认外观,仍然可以由用户自定义。如何在我的控制下做到这一点?
谢谢!
解决方案由迈克尔·莫顿:
您可以提供的默认值作为制定者的风格:
<Style TargetType="{x:Type TestTemplate:MyButton}">
<Setter Property="Background" Value="Red" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TestTemplate:MyButton}">
<Button
x:Name="PART_Button"
IsEnabled="{TemplateBinding IsEnabled}"
Content="{TemplateBinding Content}"
Background="{TemplateBinding Background}"
/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
用法:
<StackPanel>
<TestTemplate:MyButton Background="Blue">Explicitly blue</TestTemplate:MyButton>
<TestTemplate:MyButton>Naturally red</TestTemplate:MyButton>
</StackPanel>
很酷,这就是我想知道的。我在问题中添加了解决方案。谢谢! – 2009-11-25 04:14:57