我正在编写一个子类化按钮的 WPF 控件。然后,我在 Themes\generic.xaml 中提供了一个默认样式,如下所示(简化):
<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>
我希望用户有机会更改控件的背景,但如果他没有,我想提供默认值。我该怎么做?
当我像在发布的代码中那样做时,除非用户明确指定它们(这有效地强制用户始终提供一些值),否则 Background 和 BorderBrush 为空(= 不存在),但标准 Windows 控件(如 Button)提供默认外观,仍然可以由用户自定义。如何在我的控制下做到这一点?
谢谢!
迈克尔莫顿的解决方案:
您可以在样式中提供默认值作为设置器:
<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>