Не удается добиться того же поведения в шаблоне элемента NavigationView в версиях Windows 10 - PullRequest
0 голосов
/ 27 декабря 2018

Я очень расстроен, пытаясь добиться такого же визуального поведения в моем приложении UWP.Вот моя проблема:

Я использую NavigationView и хочу предоставить NavigationViewItem (s) из ViewModel.Я также хочу предоставить заголовки, поэтому я создаю интерфейс ICollectionDataItem и реализую ViewModels как для NavigationViewItem, так и NavigationViewItemHeader, чтобы модель основного представления предоставляла список ICollectionDataItem для NavigationView, а DataTemplateSelector выполняет магию.Вот как это выглядит прямо сейчас:

<NavigationView 
  MenuItemsSource="{Binding Home.CollectionsView, Source={StaticResource Locator}}"
  MenuItemTemplateSelector="{StaticResource NavigationViewTemplateSelector}" />

public interface ICollectionDataItem
{
    string Title { get; set; }
    string Glyph { get; set; }
    bool IsVisible { get; set; }
    bool IsHeader { get; set; }
}

Затем я создаю DataTemplate для NavigationViewItem и еще один для NavigationViewItemHeader:

<DataTemplate x:Key="NavigationItemTemplate" x:DataType="models:ICollectionDataItem">
  <NavigationViewItem> <!--Bindings-->
  </NavigationViewItem>
</DataTemplate>
<DataTemplate x:Key="NavigationHeaderTemplate" x:DataType="models:ICollectionDataItem">
  <NavigationViewItemHeader> <!--Bindings-->
  </NavigationViewItemHeader>
</DataTemplate>

И теперь, конечно, DataTemplateSelector:

public DataTemplate NavItemTemplate { get; set; }
public DataTemplate NavItemHeaderTemplate { get; set; }

protected override DataTemplate SelectTemplateCore(object item)
{
    ICollectionDataItem data = (ICollectionDataItem)item;
    return (data.IsHeader) ? NavItemHeaderTemplate : NavItemTemplate;
}

Это прекрасно работает ... пока не работает.Стиль по умолчанию для NavigationViewItem в Windows 10 SDK 1809 полностью отличается от 1803. Хотя в первом SDK все работает идеально, во втором он не распознает NavigationHeaderTemplate как NavigationViewItemHeader, вместо этого он показывает NavigationViewItem с NavigationViewItemHeader в качестве содержимогокоторый отлично выбирается.

Я могу представить, как решить эту проблему для NavigationViewItem (s), я могу проверить версии Windows, я могу установить разные шаблоны для разных версий, но мой вопрос:

Как я могу предоставитьсписок ICollectionDataItem для NavigationView, а затем преобразовать его в NavigationViewItem (s) и NavigationViewItemHeader (s) с использованием xaml и гарантировать одинаковое поведение в Windows 10 1803 и 1809 (я не претендую на использование предыдущих версий)?

Может быть, вы думаете, что ответ очевиден, попробуйте сами, и вы увидите.

Я действительно разочарован этой проблемой;любая помощь будет оценена.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Я проверил последние NavigationView.И у него есть много новых функций, таких как верхнее размещение.Мы добавляем класс NavigationViewItemPresenter для нового NavigationView. Конечно, мы предлагаем вам использовать последнюю версию NavigationView.если вы хотите, чтобы он имел одинаковый внешний вид в другой целевой версии.Вы можете использовать NavigationView из Community Tool Kit .

0 голосов
/ 27 декабря 2018

Кроме использования SplitView и реализации вашей пользовательской навигации (что в основном и делает NavigationView), я не вижу никаких других решений - как описано выше, это ошибка на уровне операционной системы.

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