Я очень расстроен, пытаясь добиться такого же визуального поведения в моем приложении 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 (я не претендую на использование предыдущих версий)?
Может быть, вы думаете, что ответ очевиден, попробуйте сами, и вы увидите.
Я действительно разочарован этой проблемой;любая помощь будет оценена.
Заранее спасибо