【问题标题】:WPF page not showing contentWPF 页面不显示内容
【发布时间】:2018-04-30 21:13:39
【问题描述】:

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

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您必须查看执行顺序,尝试在 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()

    【讨论】:

    • 我不是想显示GamePage,我想显示,如果没有设置玩家,那么gamepage可以访问那个玩家,我想去设置页面,设置玩家。这意味着从游戏页面重定向到设置页面,并显示设置页面的视图。
    • 我明白这一点。不显示 GameSettingsPage 的原因是在第 9 步中 _mainFrame 导航到(未初始化的)GamePage 对象。这会覆盖第 5 步中的 Navigate。正如我所说,您最好的起点是在 Navigate 方法中放置一个断点,您会清楚地看到发生了什么。
    猜你喜欢
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多