2016-06-19 7 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 및 바인딩에 대해 배우고 더 간단한 방법을 제공해야합니다.

관련 문제