XAML WPF-为什么按钮的背景图像不变?

问题描述

我是XAML的新手,我正在尝试更改按钮的背景图像。 因此,原始背景图像是heart.jpg。 我编写了函数changeHearts(),它想检查背景图像是否为:skull.png, 因此,它将按钮的图像更改为:heart.jpg。 问题在于,当我调用函数时,它不会更改按钮的图像。

*我的C#代码中的功能

\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;
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...