gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:14:31 27 4
gpt4 key购买 nike

好的,我有一个 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 中使用这个麦粒肿:

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

最佳答案

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

关于c# - WPF 在控件中添加自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18108648/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com