Buttonをサブクラス化する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はnull(=存在しない)になります(これにより、ユーザーは常に何らかの値を提供するようになります)が、標準のウィンドウコントロール(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>