簡體   English   中英

WPF頁面未顯示內容

[英]WPF page not showing content

我有一個WPF應用程序,如果不滿足某些條件,我將在其中建立重定向。 它似乎已正確重定向,但未顯示Xaml文件的內容。

它從我的GamePage重定向到GameSettingsPage。

主窗口用作主視圖,頁面放置在堆棧面板內的框架(_mainframe)中,因此我可以切換內容而無需完全離開主窗口。

希望這是有道理的,因為幾個小時后,我還沒有找到為什么它不會顯示游戲設置頁面的問題...

我的代碼:

主視窗

public partial class MainWindow : INavigator
{


    public MainWindow()
    {
        InitializeComponent();
    }

    private void ExitGame(object sender, RoutedEventArgs e)
    {
        System.Windows.Application.Current.Shutdown();
    }

    public void Navigate(Page p)
    {
        _mainFrame.Navigate(p);
    }

    private void NavigateRulesWindow(object sender, RoutedEventArgs e)
    {
        Navigate(new GameRulesPage());
    }

    private void NavigateGameWindow(object sender, RoutedEventArgs e)
    {
        Navigate(new GamePage(this));
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {

    }
}

游戲頁面

public partial class GamePage : Page
{
    private int numberOfPlayers;
    private Player[] players;
    private int playerTurn = 0;
    private int diceThrow;
    private GameState state;
    private int delay = 500;
    private Dice dice = new Dice();
    private GameProperties _writeHelper;
    private GameRules _gameRules;

    private INavigator _navigator;

    public GamePage(INavigator navigator)
    {
        _navigator = navigator; //assign navigator so i can navigate _mainframe to other pages.

        // initialize game properties, check if they are set.
        var gameProp = new GameProperties();
        this.numberOfPlayers = 2;

        this.players = gameProp.CheckPlayerIsSet(this.players);
        //check if a player has been set
        if (this.players != null)
        { // Player is set or has been set. proceed or start the game.
            InitializeComponent();
        }
        else
        {   // redirect to settings window because players has not been set!
            _navigator.Navigate(new GameSettingsPage(_navigator));
        }
    }
}

游戲設定頁面

public partial class GameSettingsPage : Page
{
    private INavigator _navigator;

    public GameSettingsPage(INavigator navigator)
    {
        InitializeComponent();
        _navigator = navigator; //assign navigator so i can navigate _mainframe to other pages.
    }
}

很好,我的界面

public interface INavigator
{
    void Navigate(Page p);
}

您必須查看執行的順序,嘗試在Navigate(Page)方法中放置一個斷點,然后您會看到發生了什么。

為了解釋為什么什么都不顯示,讓我們看看會發生什么。

  1. 您調用NavigateGameWindow()方法。

  2. 它開始構造GamePage對象。

  3. 條件進入else部分。

  4. GameSettingsPage已構建。

  5. _mainFrame.Navigate被調用,_mainFrame導航到GameSettingsPage。

  6. 線程繼續執行,因此什么也不會顯示。

  7. MainWindow.Navigate()返回到GamePage構造函數 ,此操作已完成。

  8. 現在,執行又回到了NavigateGameWindow ,它再次使用GamePage類型的對象調用MainWindow.Navigate()

  9. _mainFrame導航到GamePage對象。

不顯示任何內容(而不顯示GamePage )的原因是,當不滿足條件時,您不會在其構造函數中調用InitializeComponents()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM