[英]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)方法中放置一个断点,然后您会看到发生了什么。
为了解释为什么什么都不显示,让我们看看会发生什么。
您调用NavigateGameWindow()方法。
它开始构造GamePage对象。
条件进入else部分。
GameSettingsPage已构建。
_mainFrame.Navigate被调用,_mainFrame导航到GameSettingsPage。
线程继续执行,因此什么也不会显示。
MainWindow.Navigate()返回到GamePage构造函数 ,此操作已完成。
现在,执行又回到了NavigateGameWindow ,它再次使用GamePage类型的对象调用MainWindow.Navigate() 。
_mainFrame导航到GamePage对象。
不显示任何内容(而不显示GamePage )的原因是,当不满足条件时,您不会在其构造函数中调用InitializeComponents() 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.