首页 文章

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

提问于
浏览
10

好吧,我有一个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"/>

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

<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 . 提前致谢 .

2 回答

  • 24

    您可以使用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"/>
    
  • 0

    我使用 Tag property ,效果很好 . 我可以在 Tag 上写任何东西

    例如 Button 上的(AXML):

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

    我可以使用字符串字段将列表或值 intdate 等添加到 interpretconvert 字符串中 .

    **我使用此解决方案,因为需要为按钮添加ID字段 .

相关问题