我正在使用xaml和c#为Windows 8.1商店创建一个tic tac toe游戏,并试图在点击时更改X和O按钮。最初,我在xaml中为按钮设置了空白图像,而在button_click事件中,我正在尝试更改图像源。以下是我的代码片段:
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
if (turn == 1)
{
BitmapImage bmp = new BitmapImage();
Uri u = new Uri("ms-appx:/Images/O_logo.png", UriKind.RelativeOrAbsolute);
bmp.UriSource = u;
ImageBrush i = new ImageBrush();
i.ImageSource = bmp;
btn.Background = i;
}
else
{
BitmapImage bmp = new BitmapImage();
Uri u = new Uri("ms-appx:/Images/X_logo.png", UriKind.RelativeOrAbsolute);
bmp.UriSource = u;
ImageBrush i = new ImageBrush();
i.ImageSource = bmp;
btn.Background = i;
}
btn.IsEnabled = false;
//win(btn.Content.ToString());
turn += 1;
if (turn > 2)
turn = 1;
}
我在线阅读了一些文章,其中一些建议我将我的图像的构建操作设置为Resource,但是我没有选择它。我有PRIResource和Embedded Resource作为选项。我对mvvm和触发器的了解非常有限,因此希望使用wpf本身而不是xaml解决问题。
我正在使用VS Studio Professional 2013
答案 0 :(得分:3)
Background
。您应该使用Image
作为按钮内容:
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
if (turn == 1)
{
BitmapImage bmp = new BitmapImage();
Uri u = new Uri("ms-appx:/Images/O_logo.png", UriKind.RelativeOrAbsolute);
bmp.UriSource = u;
// NOTE: change starts here
Image i = new Image();
i.Source = bmp;
btn.Content = i;
}
else
{
BitmapImage bmp = new BitmapImage();
Uri u = new Uri("ms-appx:/Images/X_logo.png", UriKind.RelativeOrAbsolute);
bmp.UriSource = u;
// NOTE: change starts here
Image i = new Image();
i.Source = bmp;
btn.Content = i;
}
btn.IsEnabled = false;
//win(btn.Content.ToString());
turn += 1;
if (turn > 2)
turn = 1;
}
我还强烈建议你学习并开始使用XAML和绑定而不是避免它。你实际上正在与WPF“战斗”,就像你使用它一样,让自己变得更加困难。如果按预期使用它,您可能会发现它优于Windows窗体。
答案 1 :(得分:1)
我在WPF中做了非常类似的事情,而不是tic tac toe,但是有多个数据网格,每个数据网格都有不同的背景占据完全相同的位置,然后使用按钮启用/禁用。我会写下一些代码,但是我不知道wpf是否像我的winforms一样脱离我的头脑,而且它们非常不同(主要区别在于wpf相比之下是垃圾)。
但是像:
button1_click(object sender, EventArgs e)
{
if (turn == 1)
{
gridX.Visibility = visible;
}
else
{
gridO.Visibility = visible;
}
button1.Visibility = hidden;
}
然后将图像放在网格,标签或w / e
中