2015-07-31 1 views
0

Предварительное предупреждение, я новичок в C# и XAML, но мне действительно нравятся приложения для Windows 10 UWP. У меня вопрос о том, как правильно обрабатывать SplitView.Доступ к управлению SplitView с другой страницы, чем его хост - C# XAML Windows 10 UWP

У меня есть главная страница, в которой у меня есть элемент управления SplitView. В Content SplitView я добавил фрейм для навигации на другие страницы. Я хочу добавить кнопку Hamburger на дочерней странице, чтобы открыть SplitView на главной странице, но я не могу получить доступ к элементу управления SplitView с дочерней страницы. Как я могу сделать элемент управления SplitView доступным, чтобы кнопка гамбургера внутри подстраницы могла открыть панель SplitView?

Альтернативой является добавление заголовка на главной странице и наличие там статической кнопки гамбургера, но мне не нравится этот параметр, поскольку он затрудняет обработку содержимого заголовка текста. Другой - скопировать SplitView на каждую страницу. Я тоже не хочу этого делать.

Любые советы были бы замечательными! Спасибо.

ответ

1

Я настоятельно рекомендую вам воспользоваться альтернативным вариантом включения кнопки гамбургера на главной странице. Пользователи всегда ожидают, что он будет находиться в одном и том же месте каждый раз, и изменение этого подхода, вероятно, приведет к плохой работе с пользователем.

Вы также не хотите повторять код и, следовательно, не хотите воссоздавать кнопку на каждой странице, а также любые дополнительные функции, такие как команды открытия/закрытия.

Вместо того, чтобы ссылаться на элементы с одной страницы на другую, лучше придерживаться того, чтобы вещи были слабо связаны. Это можно сделать с помощью плагина messenger, который отправляет событие с одной страницы на другую, что может дать ему инструкции о том, что вы хотите сделать. Таким образом, другая страница должна только прослушивать событие, а не сильные ссылки. Чтобы оптимизировать некоторые из этих процессов, вы можете наследовать базовый класс, который реализует функциональность мессенджера.

Это обеспечит решение вашей кнопки и текстовых ситуаций с заголовком, но их настройка выходит за рамки этого вопроса. В зависимости от размера вашего приложения и ваших целей вам может потребоваться изучить существующие рамки, которые помогают в разработке поддерживаемых приложений. Хорошая структура Mvvm, которую я бы рекомендовал проверить, - MvvmCross, которая также пересекает платформу и содержит messenger plugin.

Удачи вам в приложении.

0

Как указано выше, лучше сохранить кнопку гамбургера на главной странице по нескольким причинам. Одна из них - консистенция, упомянутая выше. Во-вторых, вам нужно будет воссоздать кнопку гамбургера на каждой из ваших страниц контента, а не только один раз в MainPage.xaml. Кроме того, имейте в виду, существуют различные виды взаимодействия с меню SplitView с точки зрения того, как он появляется и выводится, и как он отображается, все перечисленные ниже.

Inline - Когда панель меню открыта, она перетаскивает содержимое. Когда он закрыт, содержимое возвращается в исходное местоположение.

Оверлей - Когда панель меню открыта, она лежит поверх содержимого. Когда он закрыт, он невидим.

Compact Overlay - Когда панель меню открыта, она лежит поверх содержимого. Когда он закрыт, панель все еще отображается в компактном режиме.

Compact Inline - Когда панель меню открыта, она перетаскивает содержимое. Когда он закрыт, содержимое возвращается в исходное положение, но панель все еще видна в компактном режиме.

Здесь вы также можете увидеть быстрое введение в SplitView. http://jamesqquick.com/windows-10-splitview-intro/

1

Я нашел это решение:

В MainPage, в вашем SplitView методе кнопки панели, добавьте ссылку SplitView в качестве параметра в Navigate():

private void SlitViewPaneButton_Tapped(object sender, TappedRoutedEventArgs e) 
    { 
     var frame = contentFrame; 
     Page page = frame?.Content as Page; 
     if (page?.GetType() != typeof(ChildPage)) 
     {    
      frame.Navigate(typeof(ChildPage), SplitViewName); 
     } 
    } 

В вашем ChildPage.xaml. CS:

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     SplitView sv = new SplitView(); 
     sv = e.Parameter as NavigateControls; 
    } 

Теперь вы можете сделать sv.IsPaneOpen = ложно, в вашем коде ChildFrame.

Примечание: если вы хотите передать несколько элементов управления, создайте класс с этими элементами управления как переменные и используйте экземпляр как параметр.

Смежные вопросы