2013-08-07 17 views
7

私はリソース辞書を持っているWPFアプリケーションを持っています。辞書では、私はこのようになりますButtonのための新しいスタイルいますWPFコントロールにカスタムプロパティを追加する

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

そして、このように私のXAMLでこの麦粒腫を使用します。

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

は、今私が何をしたいのか作成し、ありますOverWidthOverHeightという名前Buttonスタイルで新しいプロパティ、このようにそれを使用するために:

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

そして、XAMLで:

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

これが可能かどうかわかりません。私はC#コードからBinding SomeIntengerを使いたくない。 ありがとうございます。

答えて

19

あなたは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"/> 
関連する問題