我有一个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);
}
答案 0 :(得分:1)
您必须查看执行顺序,尝试在导航(页面)方法中放置一个断点,然后您就会看到发生了什么。
为了解释为什么没有显示,请看看会发生什么。
您调用 NavigateGameWindow()方法。
它开始构建 GamePage 对象。
条件进入了else部分。
构建了GameSettingsPage 。
_mainFrame.Navigate 被调用, _mainFrame 导航到 GameSettingsPage 。
线程继续执行,因此不会显示任何内容。
MainWindow.Navigate()返回 GamePage构造函数,已完成。
执行现在回到 NavigateGameWindow ,再次使用 GamePage 类型的对象调用 MainWindow.Navigate()。
_mainFrame 导航到 GamePage 对象。
没有显示任何内容(而不是 GamePage )的原因是你在它的构造函数中没有调用 InitializeComponents()条件没有达到。