2013-08-07 10 views
7

Tamam Bir kaynak sözlüğüm olduğu bir WPF uygulamasına sahibim.WPF Bir kontrolde bir özel özellik ekleme

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

Ve böyle benim XAML bu arpacık kullanın:: sözlükte i şöyle bir Button için yeni bir stili var Artık yapmak olduğunu istediklerini

<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"/> 

, bir oluştur sırayla OverWidth ve OverHeight adlı Button tarzında yeni özellik bu gibi kullanmak için:

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

ve XAML:

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

Bunun mümkün olup olmadığını bile bilmiyorum. C# kodundan Binding SomeIntenger'u kullanmak istemiyorum. Şimdiden teşekkürler.

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:

cevap

19

Sen attached properties kullanabilirsiniz

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"/>