XAML WPF - 为什么按钮的背景图片没有改变?
XAML WPF -Why the background image of button does not change?
我是 XAML 的新手,我正在尝试更改按钮的背景图像。
所以,原来的背景图是heart.jpg。
我编写了函数 changeHearts() 来检查背景图像是否为: skull.png ,
所以它会将按钮的图像更改为: heart.jpg 。
问题是当我调用这个函数时,它并没有改变按钮的图像。
- 2 个图像 属性 都设置为:资源。
*我的 C# 代码中的函数:
private void changeHearts()
{
Uri resourceUri = new Uri("/Images/skull.png", UriKind.Relative);
StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri);
BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream);
var brush2 = new ImageBrush();
brush2.ImageSource = temp;
Uri resourceUri1 = new Uri("/Images/heart.jpg", UriKind.Relative);
StreamResourceInfo streamInfo1 = Application.GetResourceStream(resourceUri1);
BitmapFrame temp1 = BitmapFrame.Create(streamInfo1.Stream);
var brush = new ImageBrush();
brush.ImageSource = temp1;
foreach (Button btn in split1.Children)
{
if (btn.Background == brush2)
btn.Background = brush;
}
foreach (Button btn in split2.Children)
{
if (btn.Background == brush2)
btn.Background = brush;
}
}
The problem is that when I call the function, it does not change the image of the buttons. Please help me, any advice will be great.
那是因为您将 ImageBrush
个实例的 引用 与 ==
运算符进行了比较。比较总是会失败,因为您在 XAML 和代码中定义的每个 ImageBrush
都是具有唯一引用的 distict 实例。因此,它们永远不相等。
I wrote function changeHearts() that suppose to check if the background image is: skull.png , So it will change the image of the button to: 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>
调整您的方法来检查按钮的 Tag
属性,如果匹配则更改标签:
if (btn.Tag.Equals(ButtonType.Hearts))
{
btn.Tag = ButtonType.Skull;
btn.Background = brush;
}
我是 XAML 的新手,我正在尝试更改按钮的背景图像。 所以,原来的背景图是heart.jpg。 我编写了函数 changeHearts() 来检查背景图像是否为: skull.png , 所以它会将按钮的图像更改为: heart.jpg 。 问题是当我调用这个函数时,它并没有改变按钮的图像。
- 2 个图像 属性 都设置为:资源。
*我的 C# 代码中的函数:
private void changeHearts()
{
Uri resourceUri = new Uri("/Images/skull.png", UriKind.Relative);
StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri);
BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream);
var brush2 = new ImageBrush();
brush2.ImageSource = temp;
Uri resourceUri1 = new Uri("/Images/heart.jpg", UriKind.Relative);
StreamResourceInfo streamInfo1 = Application.GetResourceStream(resourceUri1);
BitmapFrame temp1 = BitmapFrame.Create(streamInfo1.Stream);
var brush = new ImageBrush();
brush.ImageSource = temp1;
foreach (Button btn in split1.Children)
{
if (btn.Background == brush2)
btn.Background = brush;
}
foreach (Button btn in split2.Children)
{
if (btn.Background == brush2)
btn.Background = brush;
}
}
The problem is that when I call the function, it does not change the image of the buttons. Please help me, any advice will be great.
那是因为您将 ImageBrush
个实例的 引用 与 ==
运算符进行了比较。比较总是会失败,因为您在 XAML 和代码中定义的每个 ImageBrush
都是具有唯一引用的 distict 实例。因此,它们永远不相等。
I wrote function changeHearts() that suppose to check if the background image is: skull.png , So it will change the image of the button to: 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>
调整您的方法来检查按钮的 Tag
属性,如果匹配则更改标签:
if (btn.Tag.Equals(ButtonType.Hearts))
{
btn.Tag = ButtonType.Skull;
btn.Background = brush;
}