2013-08-07 9 views
7

Ok ich habe eine WPF-Anwendung, in der ich ein Ressource-Wörterbuch habe. Im Wörterbuch habe ich einen neuen Stil für eine Button, die wie folgt aussieht:WPF Hinzufügen einer benutzerdefinierten Eigenschaft in einem Steuerelement

<Style x:Key="MenuButtonStyle" TargetType="Button"> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 

       <Grid> 
        <Image x:Name="Imager" RenderOptions.BitmapScalingMode="HighQuality" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag}" VerticalAlignment="Center" HorizontalAlignment="Center" Stretch="UniformToFill"/> 
       </Grid> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter TargetName="Imager" Property="Width" Value="24" /> 
         <Setter TargetName="Imager" Property="Height" Value="24" /> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="true"> 
         <Setter TargetName="Imager" Property="Width" Value="16" /> 
         <Setter TargetName="Imager" Property="Height" Value="16" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

und benutzen Sie diesen Gerstenkorn in meiner XAML wie folgt aus:

<Button x:Name="Home" Style="{DynamicResource MenuButtonStyle}" Width="20" Height="20" Tag="\Images\Home.png"/> 
<Button x:Name="Settings" Style="{DynamicResource MenuButtonStyle}" Width="20" Height="20" Tag="\Images\Settings.png"/> 

Nun, was i tun wollen, erstellen neue Eigenschaft im Button Stil namens OverWidth und OverHeight, um es so zu verwenden:

<Trigger Property="IsMouseOver" Value="true"> 
    <Setter TargetName="Imager" Property="Width" Value= OVERWIDTH/> 
    <Setter TargetName="Imager" Property="Height" Value= OVERHEIGHT/> 
</Trigger> 

und in XAML:

<Button x:Name="Home" Style="{DynamicResource MenuButtonStyle}" Width="20" Height="20" Tag="\Images\Home.png" OVERWIDTH = "24"/> 

Ich weiß nicht einmal, ob das möglich ist. Ich möchte nicht Binding SomeIntenger von C# -Code verwenden. Vielen Dank im Voraus.

Antwort

19

Sie können das attached properties:

public class Extensions 
{ 
    public static readonly DependencyProperty OverWidthProperty = 
     DependencyProperty.RegisterAttached("OverWidth", typeof(double), typeof(Extensions), new PropertyMetadata(default(double))); 

    public static void SetOverWidth(UIElement element, double value) 
    { 
     element.SetValue(OverWidthProperty, value); 
    } 

    public static double GetOverWidth(UIElement element) 
    { 
     return (double)element.GetValue(OverWidthProperty); 
    } 
} 

XAML:

xmlns:extensions="clr-namespace:NAMESPACE FOR Extensions class" 

<Trigger Property="IsMouseOver" Value="true"> 
    <Setter Property="MinWidth" Value="{Binding Path=(extensions:Extensions.OverWidth), RelativeSource={RelativeSource Self}}"/> 
</Trigger> 

<Button extensions:Extensions.OverWidth="100" Width="10"/> 
Verwandte Themen