【发布时间】:2013-04-04 19:14:19
【问题描述】:
我正在尝试创建一个<Button/>,其背景为 png 图像和背景颜色。
注意:png图片的来源可能还不知道,所以我不能把它们放在模板里。
我有一个看起来像这样的Style:
<Style x:Key="MyButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="0">
<Image Margin="0" Source="/MyApp;component/Images/my-image.png" Stretch="None" />
<Border.Style>
<Style TargetType="{x:Type Border}">
<Setter Property="Background" Value="LimeGreen" />
</Style>
</Border.Style>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这给了我一个按钮,在纯 LimeGreen 背景上带有 png 图像。
我的MainWindow.xaml 看起来有点像这样:
<Button Style="{StaticResource MyButton}" Click="btnMine_Click" /* some other props */ />
而其背后的代码是这样的:
private void btnMine_Click(object sender, RoutedEventArgs e)
{
// TODO: change the image src on this button
var myButton = sender as Button;
// This won't work:
// myButton.Border.Image.Source = getNewImageString();
}
如何将图像源从 /MyApp2;component/Images/my-image.png 更改为其他内容?
【问题讨论】:
-
p.s.手动编辑 .xaml 文件是不是编程的,这里似乎有几个答案似乎是这样认为的。 :-/
-
你想要它完全一样(你的点击处理程序)吗?你能改变 XAML 吗?仅当您无法“触摸”该样式时,才将其“全部编程”才有意义。
-
当然,我可以编辑样式,但是按钮太多,不现实。但是,所有按钮共享相同的背景颜色。
-
不,不是完全那样,它只是一个例子。我想要做的是获取一个
button对象并在某些事件(单击、鼠标输入、窗口调整大小等)之后更改其背景图像。有意义吗? -
为按钮添加点击触发事件并在模板
<ControlTemplate.Triggers> <Trigger Property="Button.IsPressed" Value="True"> <Setter Property="Image.Source" Value=",,,"></Setter> </Trigger> </ControlTemplate.Triggers>中更改背景