ボタンのスタイルがあります。そのスタイルには、Button の ControlTemplate が含まれています。ControlTemplate には、「ImgButton」という名前のイメージが含まれています。
このスタイルを他のボタンの基本スタイルとして作成し、さまざまなボタンのイメージ コントロールの「ソース」プロパティをオーバーライドしたいと考えています。
何か案は?
ボタンのスタイルがあります。そのスタイルには、Button の ControlTemplate が含まれています。ControlTemplate には、「ImgButton」という名前のイメージが含まれています。
このスタイルを他のボタンの基本スタイルとして作成し、さまざまなボタンのイメージ コントロールの「ソース」プロパティをオーバーライドしたいと考えています。
何か案は?
ソースを割り当てるためのプロパティを提供する添付の動作を作成できます。TemplatedParentをRelativeSourceとして使用して、テンプレート内のこのプロパティに画像をバインドする必要があります。派生スタイルでは、Setterを使用して別のソースを指定できます。
添付の動作:
public static class ImageSourceBehavior
{
public static readonly DependencyProperty SourceProperty = DependencyProperty.RegisterAttached(
"Source", typeof(ImageSource), typeof(ImageSourceBehavior),
new FrameworkPropertyMetadata(null));
public static ImageSource GetSource(DependencyObject dependencyObject)
{
return (ImageSource)dependencyObject.GetValue(SourceProperty);
}
public static void SetSource(DependencyObject dependencyObject, ImageSource value)
{
dependencyObject.SetValue(SourceProperty, value);
}
}
スタイル:
<Style x:Key="Style1"
TargetType="Button">
<Setter Property="local:ImageSourceBehavior.Source"
Value="..."/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Image Source="{Binding Path=(local:ImageSourceBehavior.Source),RelativeSource={RelativeSource TemplatedParent}}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="Style2"
BasedOn="{StaticResource Style1}"
TargetType="Button">
<Setter Property="local:ImageSourceBehavior.Source"
Value="..."/>
</Style>