2012-04-08 18 views
1

私はボタン用のスタイルを持っています。そのスタイルには、ButtonのControlTemplateが含まれています。 ControlTemplateには、名前が "ImgButton"のイメージが含まれています。WPFの派生スタイルの基本スタイルコントロールテンプレートをオーバーライドする方法は?

このスタイルを他のボタンの基本スタイルとして、さまざまなボタンのImageコントロールの「ソース」プロパティをオーバーライドしたいと考えています。

アイデア?

答えて

3

Sourceを割り当てるプロパティを提供する添付動作を作成することができます。 TemplatedParentをRelativeSourceとして使用して、テンプレート内のこのプロパティにイメージをバインドする必要があります。派生されたスタイルでは、単にSetterを使って別のSourceを指定することができます。

添付behavoir:

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> 
+1

1は、これは私があまりにも使用したアプローチです。私は数ヶ月前にそれについてのブログ記事を書いた:http://tomlev2.wordpress.com/2011/10/01/wpf-creating-parameterized-styles-with-attached-properties/ –

+0

ありがとう、素敵な解決策。 – Syed

関連する問題