WPF在控件中添加自定义属性

本文关键字:添加 自定义属性 控件 WPF | 更新日期: 2023-09-27 18:26:49

好的,我有一个WPF应用程序,其中有一个资源字典。在字典里,我有一个Button的新样式,看起来像这样:

    <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中使用这个stye,如下所示:

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

现在我想做的是,在Button样式中创建一个名为OverWidthOverHeight的新属性,以便像这样使用它:

<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。提前谢谢。

WPF在控件中添加自定义属性

您可以使用附加的属性:

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

我使用了Tag属性,效果非常好。我可以在标签上写任何东西

例如按钮上的(AXML):

<Button x:Name="Btn80" Click="eventoClick" Tag="80">Casillero 80</Button>}

我可以使用字符串字段添加列表int日期等,然后解释将字符串转换为任何内容。

**我使用了这个解决方案,因为需要在按钮中添加一个ID字段。