2011-09-12 3 views
1

ressource-dicのボタンのカスタムスタイルをコーディングしました。私の質問は、さまざまなボタンにこのスタイルを使用することが可能なのですか?私は、画像のターゲットを切り替えるスタイルを呼び出すことによってparamsを設定する必要があることを意味します。 (?どのように)XAMLのさまざまなコントロールにカスタムスタイルを使用する方法

ウィンドウ:

<Button .... Style="{DynamicResource downloadButtonStyle}" IsEnabled="True" /> 

RessourceDic:

<Style x:Key="downloadButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="IsEnabled" Value="True" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <Image x:Name="PART_img" Source="/FtpUploadClient;component/media/box_48.png"/> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter TargetName="PART_img" Property="Source" Value="/FtpUploadClient;component/media/box_download_48.png" /> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter TargetName="PART_img" Property="Source" Value="/FtpUploadClient;component/media/box_deactivated_48.png" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

答えて

2

あなたが添付プロパティを使用することができます。これはTemplate

<ControlTemplate> 
    <Image x:Name="PART_img" Source="{Binding RelativeSource={RelativeSource TemplatedParent}, 
               Path=(ex:ButtonExtension.DefaultImageSource)}"/ 
    <ControlTemplate.Triggers>  
     <Trigger Property="IsMouseOver" Value="True">  
      <Setter TargetName="PART_img" Property="Source" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, 
              Path=(ex:ButtonExtension.MouseOverImageSource)}" /> 
     </Trigger>  
     <Trigger Property="IsEnabled" Value="False">  
      <Setter TargetName="PART_img" Property="Source" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, 
              Path=(ex:ButtonExtension.DisabledImageSource)}" />  
     </Trigger>  
    </ControlTemplate.Triggers>  
</ControlTemplate> 

ButtonExtension

public class ButtonExtension 
{ 
    public static DependencyProperty DefaultImageSourceProperty = 
     DependencyProperty.RegisterAttached("DefaultImageSource", 
              typeof(ImageSource), 
              typeof(ButtonExtension), 
              new PropertyMetadata(null)); 
    public static ImageSource GetImageSource(DependencyObject target) 
    { 
     return (ImageSource)target.GetValue(DefaultImageSourceProperty); 
    } 
    public static void SetImageSource(DependencyObject target, ImageSource value) 
    { 
     target.SetValue(DefaultImageSourceProperty, value); 
    } 

    // Repeat for MouseOverImageSource and DisabledImageSource 
} 
+0

では、各Buttonインスタンス

<Button Style="{DynamicResource downloadButtonStyle}" ex:ButtonExtension.DefaultImageSource="DefaultImageSource" ex:ButtonExtension.MouseOverImageSource="MouseOverImageSource" ex:ButtonExtension.DisabledImageSource="DisabledImageSource" /> 

ためTemplate内部Imagesのソースを指定することができます完璧な:-)の作品 – jwillmer

関連する問題