2016-06-19 8 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は、表示されているMainWindowを使用せずに、表示せずに作成します。 Application.Current.MainWindowを使用してください。

これはあなたの問題を解決しますが、WPFの大きな特徴であり、より簡単な解決策を提供するMVVMとバインディングについて学ぶべきでしょう。

関連する問題