фрейм не содержит определения SourcePageType - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь настроить навигацию для моего приложения wpf с островами xaml, но не могу перемещаться между представлениями. Я получаю сообщение об ошибке:

frame does not contain a definition of SourcePageType

MainWindow.cs:

    private void On_Navigated(object sender, NavigationEventArgs e)
    {
        if (NavView.Child is NavigationView navigationView) {
            // NavView.IsBackEnabled = ContentFrame.CanGoBack;
            navView = navigationView;
            if (ContentFrame.Content?.GetType() == typeof(SettingsPage))
            {
                // SettingsItem is not part of NavView.MenuItems, and doesn't have a Tag.
                navView.SelectedItem = (NavigationViewItem)navView.SettingsItem;
                navView.Header = "Settings";
            }
            else if (ContentFrame.Content != null)
            {
                var item = _pages.FirstOrDefault(p => p.Page == e.Content);

                navView.SelectedItem = navView.MenuItems
                    .OfType<NavigationViewItem>()
                    .First(n => n.Tag.Equals(item.Tag));

                navView.Header =
                    ((NavigationViewItem)navView.Content)?.Content?.ToString();
            }
    } 
}

Я думаю, что-то не так с методом NavView_Loaded для захвата выбранного элемента? Есть какие-нибудь примеры навигации на островах xaml?

спасибо

1 Ответ

0 голосов
/ 04 февраля 2020

Класс System.Windows.Controls.Frame в WPF не имеет свойства SourcePageType, и это не имеет ничего общего с островами Xaml.

Если вы хотите узнать тип Page, который в данный момент загружается в Frame, вы можете вызвать метод GetType() для его свойства Content:

private void On_Navigated(object sender, NavigationEventArgs e)
{

    if (ContentFrame.Content?.GetType() == typeof(SettingsPage))
    {
        navView.SelectedItem = (NavigationViewItem)navView.SettingsItem;
        navView.Header = "Settings";
    }
    else if (ContentFrame.Content != null)
    {
        ...
    }
}
...