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

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

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

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

Любой совет будет фантастическим! Спасибо.

3 ответа

Решение

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

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

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

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

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

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

На главной странице в методе кнопки панели 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 = false в вашем коде ChildFrame.

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

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

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

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

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

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

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

Другие вопросы по тегам