2012-04-08 4 views

Antwort

3

Sie können ein angehängtes Verhalten erstellen, das eine Eigenschaft zum Zuweisen von Quelle bietet. Sie sollten Ihr Bild mithilfe von TemplatedParent als RelativeSource in einer Vorlage an diese Eigenschaft binden. In abgeleiteten Stilen können Sie einfach Setter (s) verwenden, um eine andere Quelle anzugeben.

angebaute 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); 
    } 
} 

Styles:

<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, ist dies der Ansatz, den ich zu verwenden. Ich schrieb vor ein paar Monaten einen Blog-Eintrag darüber: http://tomlev2.wordpress.com/2011/10/01/wpf-creating-parameterized-styles-with-attached-properties/ –

+0

Danke, nette Lösung. – Syed

Verwandte Themen