2016-06-19 3 views
-1

Я создаю игру TicTacToe, и я пытаюсь сбросить содержимое кнопки, используя статический метод в моем коде для WPF. Когда кнопка нажимает, отображается содержимое, связанное с «Игроком» того, кто его поворачивает. У меня есть класс Player, в котором хранится информация об игроке, которая отображается в разных местах. Я написал статический метод для сброса «игрового поля», но когда я запускаю свой метод, содержимое кнопки не сбрасывается. Вот как выглядит мой код.WPF с использованием статического метода для очистки содержимого кнопки

public class Player 
    { 
     public string plyName { get; set; } 
     public int plyType { get; set; } // 0 = human player, 1 = basic AI, 2 = advanced AI 
     public int plyScore { get; set; } 
     public char plySymbol { get; set; } 
     public int plyNumber { get; set; } 
    } 

    public static int round { get; set; } 
    public static int numRounds { get; set; } 
    public static int[,] gameBoard = new int[3, 3]; 

    public static Player Player1 = new Player(); 
    public static Player Player2 = new Player(); 
    public static Player currPlayer; 

и вот мой clearGameBoard Метод:

public static void clearGameBoard() 
    { 
     MainWindow mw = new MainWindow(); 
     mw.btnTL.Content = ""; 
     mw.btnTM.Content = ""; 
     mw.btnTR.Content = ""; 
     mw.btnML.Content = ""; 
     mw.btnMM.Content = ""; 
     mw.btnMR.Content = ""; 
     mw.btnBL.Content = ""; 
     mw.btnBM.Content = ""; 
     mw.btnBR.Content = ""; 
     for (int i = 0; i < 3; i++) 
     { 
      for (int j = 0; j < 3; j++) 
      { 
       App.gameBoard[i, j] = 0; 
      } 
     } 
    } 

и вот моя XAML:

<Grid> 
    <Button x:Name="btnTL" HorizontalAlignment="Left" Margin="19,70,0,0" VerticalAlignment="Top" Width="63" Height="63" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="35" Click="btnTL_Click"/> 
    <Button x:Name="btnTM" HorizontalAlignment="Left" Margin="87,70,0,0" VerticalAlignment="Top" Width="63" Height="63" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="35" Click="btnTM_Click"/> 
    <Button x:Name="btnTR" HorizontalAlignment="Left" Margin="155,70,0,0" VerticalAlignment="Top" Width="63" Height="63" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="35" Click="btnTR_Click"/> 
    <Button x:Name="btnML" HorizontalAlignment="Left" Margin="19,138,0,0" VerticalAlignment="Top" Width="63" Height="63" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="35" Click="btnML_Click"/> 
    <Button x:Name="btnMM" HorizontalAlignment="Left" Margin="87,138,0,0" VerticalAlignment="Top" Width="63" Height="63" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="35" Click="btnMM_Click"/> 
    <Button x:Name="btnMR" HorizontalAlignment="Left" Margin="155,138,0,0" VerticalAlignment="Top" Width="63" Height="63" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="35" Click="btnMR_Click"/> 
    <Button x:Name="btnBL" HorizontalAlignment="Left" Margin="19,206,0,0" VerticalAlignment="Top" Width="63" Height="63" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="35" Click="btnBL_Click"/> 
    <Button x:Name="btnBM" HorizontalAlignment="Left" Margin="87,206,0,0" VerticalAlignment="Top" Width="63" Height="63" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="35" Click="btnBM_Click"/> 
    <Button x:Name="btnBR" HorizontalAlignment="Left" Margin="155,206,0,0" VerticalAlignment="Top" Width="63" Height="63" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="35" Click="btnBR_Click"/> 
    <Label x:Name="label" Content="Tic Tac Toe" HorizontalContentAlignment="Center" HorizontalAlignment="Left" Margin="19,10,0,0" VerticalAlignment="Top" Height="47" Width="199" FontSize="30"/> 

</Grid> 

Я попытался просто установить кнопки непосредственно содержание, но получил ошибку, что «объект ссылка, необходимая для нестатического свойства ". Я уверен, что это очевидная ошибка, которую я делаю, но я не могу найти ответ, который помогает. Любая помощь будет принята с благодарностью. Благодарю.

+1

Ошибка в том, что метод clearGameBoard очищает плату в другом окне mw ('MainWindow mw = new MainWindow();'). в качестве быстрого взлома вы можете получить активное окно из «App.Current.MainWindow» и передать его в «MainWindow». Но все становится проще, если вы читаете и применяете подход MVVM – ASh

ответ

0

Вы создаете новый MainWindow, не показывая его, а не используя отображаемый. Используйте Application.Current.MainWindow.

Это решит вашу проблему, но вы, вероятно, должны узнать о MVVM и привязке, которые являются большими функциями WPF и обеспечивают более простое решение.