我正在研究WPF应用程序。我有一个资源字典,我在其中为ToolTip和Button编写了自定义样式。实际上,对于按钮我已经做了两种风格。 其中之一,包括一个出现在buttoon内容左侧的图像。
<Style x:Key="ButtonImageStyle" TargetType="{x:Type Button}">
........
<TextBlock Margin="5.25,2.417,5.583,5.25" Foreground = White />
<Image x:Name="ButtonImage" Source="/MyProject;component/Images/icoMainMenu01.png" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="-100,0,0,0" Width="16" Height="16"/>
.... </Style
现在,在MainWindow.xaml中我有以下内容:
<Button Style="{DynamicResource ButtonImageStyle}" x:Name="JustButton" Click="JustButton_Click" Height="50" ToolTip="Press for 1" Content="1" Margin="310,282,400,238" />
我希望能够更改该图像。我将有8个按钮,我希望每个按钮都有一个与之关联的不同图像。 你们有什么想法吗? 谢谢!
答案 0 :(得分:0)
有各种选项,从(ab)使用Tag
等属性到UserControl
中的子类或合成,您还可以创建attached property。
最干净的可能是子类化,然后您可以为要使用的dependency property创建一个新的ImageSource
,然后您可以使用TemplateBinding
在默认模板中绑定。{ / p>
要进行子类化,您可以使用VS,从新项目中选择Custom Control (WPF)
,这应创建一个类文件,并将基本样式添加到主题资源字典中,该字典通常位于Themes/Generic.xaml
中。这个课程看起来像这样:
//<Usings>
namespace Test.Controls
{
public class ImageButton : Button
{
public static readonly DependencyProperty ImageProperty =
DependencyProperty.Register("Image", typeof(ImageSource), typeof(ImageButton), new UIPropertyMetadata(null));
public ImageSource Image
{
get { return (ImageSource)GetValue(ImageProperty); }
set { SetValue(ImageProperty, value); }
}
}
}
现在主题会更复杂,您可以只复制一个default templates按钮并将其粘贴到默认样式中。然后你只需要在某个地方添加你的图像,但是这个绑定:
<Image Source="{TemplateBinding Image}" .../>
当您使用此控件时,您将不再需要引用样式,因为所有内容都是默认样式,现在有一个图像属性:
<controls:ImageButton Content="Lorem Ipsum"
Image="Img.png"/>
(要使用Tag
,您只需使用普通按钮并使用TemplateBinding到标记,并将按钮的标记设置为URL)
我忘了提到另一种使用动态资源的可能性,它有点冗长但非常简单,请参阅我的this answer作为一个例子。