Современный интерфейс, как перейти на другую страницу по другой ссылке

В настоящее время я использую современный пользовательский интерфейс от CodePlex. Он великолепен и прост в использовании, но есть некоторые классы и события, с которыми я не знаком. Пример: у меня есть две групповые ссылки с именами «Пациенты» и «Конфигурации». В каждой из групповых ссылок есть несколько страниц. Я попытался перейти с одной страницы на другую, используя событие нажатия кнопки. Это сработало. Но когда я попытался перейти со страницы 1 GroupLink2 на страницу 1 GroupLink1, это все еще работало, но проблема заключалась в том, что активная GroupLink оставалась в GroupLink2 вместо GroupLink1, как показано на снимках экрана ниже:

Конфигурация GroupLink2, я нажму на новую запись

Страница перешла на PatientPage, но GroupLink по-прежнему GroupLink2

Кстати, я использовал код для перехода от Allergies(IrritantPage) к PatientPage:

private void FilterControl_OnToPatientClick(object sender, RoutedEventArgs e)
    {            
        NavigationCommands.GoToPage.Execute("/MainContents/PatientGridPage.xaml", this);
    }

Итак, как мне решить эту проблему?

вот мое главное окно, вкладка пациента и страница списка конфигурации

СОВРЕМЕННОЕ ОКНО (главное окно)

<mui:ModernWindow x:Class="DentalProto.MainWindow"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:mui="http://firstfloorsoftware.com/ModernUI"
                  Title="Dental" IsTitleVisible="True"
                  WindowStartupLocation="CenterScreen"
                  Width="1200"
                  Height="720"                       
                  ContentSource="/Pages/MainTabPage.xaml"
                  Closing="MainWindow_OnClosing"
                  >

    <mui:ModernWindow.MenuLinkGroups>
        <mui:LinkGroup DisplayName="User Name">
            <mui:LinkGroup.Links>

                <mui:Link DisplayName="Patients" Source="/Pages/MainTabPage.xaml" />
                <mui:Link DisplayName="Configurations" Source="/Pages/ConfigurationsListNav.xaml" />

            </mui:LinkGroup.Links>
        </mui:LinkGroup>

        <mui:LinkGroup DisplayName="settings" GroupKey="settings">
            <mui:LinkGroup.Links>
                <mui:Link DisplayName="software" Source="/Pages/SettingsPage.xaml" />
            </mui:LinkGroup.Links>
        </mui:LinkGroup>
    </mui:ModernWindow.MenuLinkGroups>

    <mui:ModernWindow.TitleLinks>
        <mui:Link DisplayName="settings" Source="/Pages/SettingsPage.xaml" />
        <mui:Link DisplayName="help" Source="https://www.facebook.com/" />
    </mui:ModernWindow.TitleLinks>
</mui:ModernWindow>

СТРАНИЦА MAINTAB (страница пациента)

<UserControl x:Class="DentalProto.Pages.MainTabPage"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:mui="http://firstfloorsoftware.com/ModernUI"

             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="1280">
    <Grid >
        <!-- TODO: set @SelectedSource -->
        <mui:ModernTab Layout="Tab">
            <mui:ModernTab.Links>
                <!-- TODO: set @Source -->

                <mui:Link DisplayName="Patient" Source="/MainContents/PatientGridPage.xaml" />
                <mui:Link DisplayName="Treatment Record" Source="/MainContents/TreatmentFillInPage.xaml"/>

            </mui:ModernTab.Links>
        </mui:ModernTab>
    </Grid>
</UserControl>

CONFIGURATIONLISTNAV (страница конфигураций)

<UserControl x:Class="DentalProto.Pages.ConfigurationsListNav"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:mui="http://firstfloorsoftware.com/ModernUI"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid Style="{StaticResource ContentRoot}">
        <!-- TODO: set @SelectedSource -->
        <mui:ModernTab Layout="List">
            <mui:ModernTab.Links>
                <!-- TODO: set @Source -->
                <mui:Link DisplayName="Allergies" Source="/MainContents/IrritantGridPage.xaml"/>
                <mui:Link DisplayName="Health Diseases" Source="/MainContents/HealthDiseaseGridPage.xaml"/>
                <mui:Link DisplayName="Mouth Diseases" Source="/MainContents/MouthDiseaseGridPage.xaml"/>
                <mui:Link DisplayName="Procedures"  Source="/MainContents/ProcedureGridPage.xaml"/>
                <mui:Link DisplayName="Dentists" Source="/MainContents/DentistGridPage.xaml"/>
            </mui:ModernTab.Links>
        </mui:ModernTab>
    </Grid>
</UserControl>

person Kokombads    schedule 31.01.2015    source источник


Ответы (2)


Вы смешиваете навигацию по страницам с навигацией по вкладкам внутри элемента управления ModernTab.

Если вы вызываете NavigationCommands.GoToPage.Execute внутри элемента управления ModernTab, вы меняете текущую «вкладку», а не текущую «страницу».

Чтобы изменить страницу верхнего уровня, вы можете использовать:

IInputElement target = NavigationHelper.FindFrame("_top", this);
NavigationCommands.GoToPage.Execute("/Pages/BasicPage1.xaml", target);

Если новая страница — это еще одна вкладка ModernTab, и вы хотите выбрать вкладку, отличную от вкладки по умолчанию, вам нужно добавить дополнительный код. В примере вы можете передать параметры на новую страницу. См. этот SO ответ.

person corradolab    schedule 04.02.2015
comment
Это сработало!! Я не совсем понимаю это, и я не знаю, что означает _top, но это работает, это все, что имеет значение - person Kokombads; 04.02.2015
comment
Я делаю что-то подобное, но target всегда равно нулю, независимо от _top, _self, _parent и т. д. Есть идеи? - person Mark Richman; 01.06.2015
comment
@Mark Richman Убедитесь, что вы не делаете это в методах IContent (OnFragmentNavigation и т. д.) - там всегда будет null - person a''; 03.06.2015
comment
@erem Ага. Но если я делаю NavigationCommands.GoToPage.Execute("Foo.xml", this) со страниц контента, не ища фрейма, это работает. - person Mark Richman; 03.06.2015

Для тех, кто может бороться с этим, установите это в своем конструкторе MainWindow.cs:

        Application.Current.MainWindow = this;

Затем в той части вашего приложения, где вы хотите перейти на страницу, запустите это:

        IInputElement target = NavigationHelper.FindFrame("_top", Application.Current.MainWindow);
        NavigationCommands.GoToPage.Execute("/NameOfYourPage.xaml", target);
person Aaron Reed    schedule 07.09.2015