点击wpf c#更改按钮图像

时间:2014-04-23 02:28:25

标签: c# wpf xaml

我正在使用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

2 个答案:

答案 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