Страница WPF не показывает содержание - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть приложение 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);
}

1 Ответ

0 голосов
/ 30 апреля 2018

Вы должны посмотреть порядок выполнения, попробуйте поместить точку останова в метод Navigate (Page) , и вы увидите, что происходит.

Чтобы объяснить, почему ничего не отображается, давайте посмотрим, что происходит.

  1. Вы вызываете метод NavigateGameWindow () .

  2. Начинается построение GamePage объекта.

  3. Условие входит в раздел else.

  4. GameSettingsPage построен.

  5. _mainFrame.Navigate вызывается и _mainFrame перемещается на GameSettingsPage .

  6. Поток продолжает выполняться, поэтому пока ничего не будет отображаться.

  7. MainWindow.Navigate () возвращает обратно в конструктор GamePage , который завершен.

  8. Теперь выполнение вернулось в NavigateGameWindow , которое снова вызывает MainWindow.Navigate () с объектом типа GamePage .

  9. _mainFrame перемещается к объекту GamePage .

Причина, по которой ничего не отображается (а не GamePage ), заключается в том, что вы не вызываете InitializeComponents () в его конструкторе, когда условие не выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...