WPF页面未显示内容

时间:2018-04-30 12:40:55

标签: c# wpf

我有一个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);
}

1 个答案:

答案 0 :(得分:1)

您必须查看执行顺序,尝试在导航(页面)方法中放置一个断点,然后您就会看到发生了什么。

为了解释为什么没有显示,请看看会发生什么。

  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 对象。

  10. 没有显示任何内容(而不是 GamePage )的原因是你在它的构造函数中没有调用 InitializeComponents()条件没有达到。