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);
}
解决方案
您必须查看执行顺序,尝试在Navigate(Page)方法中放置一个断点,然后您会看到发生了什么。
为了解释为什么什么都没有显示,让我们看看发生了什么。
您调用NavigateGameWindow()方法。
它开始构建GamePage对象。
条件进入 else 部分。
GameSettingsPage被构造。
_mainFrame.Navigate被调用并且_mainFrame导航到GameSettingsPage。
线程继续执行,所以什么都不会显示。
MainWindow.Navigate()返回完成的GamePage 构造函数。
执行现在回到NavigateGameWindow中,它使用GamePage类型的对象再次调用MainWindow.Navigate() 。
_mainFrame导航到GamePage对象。
什么都不显示(而不是GamePage )的原因是当条件不满足时,您没有在其构造函数中调用InitializeComponents() 。
推荐阅读
- java - JPA 多对一关系和外部表的问题
- python - Pytorch:尽管矩阵的大小匹配(m1:[256 x 200],m2:[256 x 200]),但大小不匹配错误
- swift - 在 Swift 中将地图从 Firestore 转换为字典
- javascript - jQuery:使用 jQuery 保存表单会使表单无效
- android - 我不能在 androidx.appcompat:appcompat:1.1.0 上使用 API 反射
- c - 如何在函数内初始化结构数组?
- javascript - 如何在不查询所有集合的情况下检查我的用户中是否存在字段
- reactjs - GitHub Primer React 组件与 Octions 的使用
- python-3.x - 使用 Nd 数组切片 N+1d Numpy 数组
- javascript - 在 VueJS 中输出动态值?