繁体   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