首页 > 解决方案 > 函数使用初始化的 label.content 而不是我设置的

问题描述

我正在制作一个记忆游戏,最后我需要向获胜者展示一个消息框。比如:“PlayerName 赢了!” 就像您在我的代码中看到的那样,我正在尝试获取“name1”标签和“name2”标签的内容。当我开始我的游戏时,这些标签的默认内容是“玩家 1”和“玩家 2”。在我的游戏中,我有 2 个文本框,当我单击“设置”按钮时,屏幕上的名称会发生​​变化。因此标签的内容发生了变化。但如果游戏结束,消息框会显示:“玩家 1 赢了!” 或“玩家 2 赢了!” 而不是我设置的名字。如何使用标签的“更新”内容?

我的 MainWindow.xaml.cs

    private void setNames_Click(object sender, RoutedEventArgs e)
    {
        string userName1 = nameEnter1.Text;
        string userName2 = nameEnter2.Text;
        name1.Content = userName1;
        name2.Content = userName2;
        set1.Visibility = Visibility.Collapsed;
        set2.Visibility = Visibility.Collapsed;
    }

    public object AccessNamePlayer1()
    {
        return name1.Content;
    }

    public object AccessNamePlayer2()
    {
        return name2.Content;
    }

我的 MemoryGrid.cs(另一个类)

    private void checkWinner()
    {
        MainWindow window1 = new MainWindow();
        object player1 = window1.AccessNamePlayer1();

        MainWindow window2 = new MainWindow();
        object player2 = window1.AccessNamePlayer2();

        if (scoreName1Tot > scoreName2Tot)
        {
            MessageBox.Show(player1 + " heeft gewonnen!");
        }
        else if (scoreName1Tot < scoreName2Tot)
        {
            MessageBox.Show(player2 + " heeft gewonnen!");
        }
        else if (scoreName1Tot == scoreName2Tot)
        {
            MessageBox.Show("Gelijkspel!");
        }
    }

标签: c#wpfxaml

解决方案


MemoryGrid 类不应访问任何窗口以获取任何数据。它应该是另一种方式:窗口将数据更新到关联的类(通常通过 WPF 中的绑定,但直接更新也可以)。

所以在 MemoryGrid 中为玩家姓名添加两个公共属性

public string player1 { get; set; }
public string player2 { get; set; }

private void checkWinner()
{
    if (scoreName1Tot == scoreName2Tot)
    {
        MessageBox.Show("Gelijkspel!");
    }
    else
    {
        string winner = (scoreName1Tot > scoreName2Tot) ? player1 : player2;
        MessageBox.Show(winner + " heeft gewonnen!");
    }
}

并从 MainWindow 更新它们:

private void setNames_Click(object sender, RoutedEventArgs e)
{
    string userName1 = nameEnter1.Text;
    string userName2 = nameEnter2.Text;

    memoryGridInstance.player1 = userName1;
    memoryGridInstance.player2 = userName2;

    name1.Content = userName1;
    name2.Content = userName2;
    set1.Visibility = Visibility.Collapsed;
    set2.Visibility = Visibility.Collapsed;
}

AccessNamePlayer不需要


推荐阅读