gpt4 book ai didi

c# - WPF : Re-usable template for image buttons?

转载 作者:太空狗 更新时间:2023-10-29 22:22:50 24 4
gpt4 key购买 nike

我的 WPF 项目使用了很多图像按钮,但由于我还没有找到合适的方法(我每次都必须编写相同的触发器和样式,唯一不同的是图像源),我的资源字典白白地变得很长。有更好的方法吗?

这是我用于按钮的样式示例:

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
<!-- Some setters -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Image Source="Images.png" Stretch="Fill"/>
</Grid>
<ControlTemplate.Triggers>
<!-- Some triggers ( IsFocused, IsMouseOver, etc.) -->
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

谢谢你:)

最佳答案

最简单的方法是创建一个带有Image 属性的特定控件:

public class ImageButton : Button
{
static ImageButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof (ImageButton),
new FrameworkPropertyMetadata(typeof (ImageButton)));
}


public ImageSource Image
{
get { return (ImageSource)GetValue(ImageProperty); }
set { SetValue(ImageProperty, value); }
}

public static readonly DependencyProperty ImageProperty =
DependencyProperty.Register("Image", typeof(ImageSource), typeof(ImageButton), new PropertyMetadata(default(ImageSource)));

}

然后您只需在 generic.xaml 中为其创建样式,并绑定(bind)到 Image 属性,而不是显式设置图像:

<Style x:Key="{x:Type my:ImageButton}" TargetType="{x:Type my:ImageButton}">
<!-- Some setters -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type my:ImageButton}">
<Grid>
<Image Source="{TemplateBinding Image}" Stretch="Fill"/>
</Grid>
<ControlTemplate.Triggers>
<!-- Some triggers ( IsFocused, IsMouseOver, etc.) -->
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

然后你就可以像这样使用它了:

<my:ImageButton Image="Image.png" />

如果按钮的不同状态需要更多图像,可以向控件添加更多依赖属性。

另一种可能的方法是使用我所说的“参数化样式”,以避免创建特定控件;见this blog post了解详情。

关于c# - WPF : Re-usable template for image buttons?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18481787/

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