问题描述
我是XAML的新手,我正在尝试更改按钮的背景图像。 因此,原始背景图像是heart.jpg。 我编写了函数changeHearts(),它想检查背景图像是否为:skull.png, 因此,它将按钮的图像更改为:heart.jpg。 问题在于,当我调用该函数时,它不会更改按钮的图像。
\d
解决方法
问题在于,当我调用该函数时,它不会更改按钮的图像。请帮助我,任何建议都很好。
这是因为您将ImageBrush
实例的引用与==
运算符进行了比较。比较将始终失败,因为您在XAML和代码中定义的每个ImageBrush
都是具有唯一引用的Distict实例。因此,它们永远不相等。
我编写了函数changeHearts(),它想检查背景图像是否为:skull.png,因此它将按钮的图像更改为:heart.jpg。
最简单的解决方案是完全不比较图像笔刷。您的按钮以 Skull 或 Hearts 图像为背景。现在,当您致电changeHearts()
时,会发生两种情况:
- 按钮是 Skull ,现在将更改为 Hearts
- 按钮为 Hearts ,现在将更改为 Hearts
在这两种情况下,结果都是相应的按钮将是 Hearts ,因此您只需删除检查并获得相同的结果即可。
比较笔刷很困难,因为Equals
方法也无法解决问题。您将必须创建自定义比较逻辑,例如在画笔上找到要比较的属性,但我不推荐它。
另一种选择是为按钮的Tag
分配当前显示内容的标识符,即 Hearts 或 Skull 。这可以是自定义的enum
或简单的string
,例如:
public enum ButtonType
{
Skull,Hearts
}
然后将初始按钮类型分配给XAML中的按钮:
<Button x:Name="XLife1" Tag="{x:Static local:ButtonType.Hearts}" Grid.Column="0" Width="80" Height="80">
<Button.Background>
<ImageBrush ImageSource="/images/heart.jpg"/>
</Button.Background>
</Button>
调整您的方法,以检查button的Tag
属性,并在匹配的情况下更改标签:
if (btn.Tag.Equals(ButtonType.Hearts))
{
btn.Tag = ButtonType.Skull;
btn.Background = brush;
}