C# Can';无法在NavigationView'中实现相同的行为;跨Windows 10版本的s项目模板

C# Can';无法在NavigationView'中实现相同的行为;跨Windows 10版本的s项目模板,c#,xaml,uwp,C#,Xaml,Uwp,我很沮丧试图在我的UWP应用程序中实现相同的视觉行为。我的问题是: 我使用的是NavigationView,我想从ViewModel提供NavigationViewItem。我还想提供标题,因此我创建了一个ICollectionDataItem接口,并为NavigationViewItem和NavigationViewItemHeader实现了ViewModels,以便主视图模型向NavigationView提供ICollectionDataItem列表,DataTemplateSelector

我很沮丧试图在我的UWP应用程序中实现相同的视觉行为。我的问题是:

我使用的是NavigationView,我想从ViewModel提供NavigationViewItem。我还想提供标题,因此我创建了一个ICollectionDataItem接口,并为NavigationViewItem和NavigationViewItemHeader实现了ViewModels,以便主视图模型向NavigationView提供ICollectionDataItem列表,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; }
}
这很好用…直到它不起作用。Windows 10 SDK 1809中NavigationViewItem的默认样式与1803中的完全不同。虽然在第一个SDK中,一切工作正常,但在第二个SDK中,它不将NavigationHeaderTemplate识别为NavigationViewItemHeader,而是将NavigationViewItem和NavigationViewItemHeader显示为完全可选择的内容

我可以想象如何为NavigationViewItem解决这个问题,我可以检查Windows版本,我可以为不同的版本设置不同的模板,但我的问题是:

如何向NavigationView提供ICollectionDataItem列表,然后使用xaml将其转换为NavigationViewItem和NavigationViewItemHeader,并保证在Windows 10 1803和1809中具有相同的行为(我不假装使用以前的版本)

也许你认为答案很明显,你自己试试,你就会明白

我真的对这个问题感到沮丧;任何帮助都将不胜感激


提前感谢

除了使用SplitView和实现自定义导航(这基本上就是NavigationView所做的),我没有看到任何其他解决方案-如上所述,这似乎是操作系统级别的错误。

我检查了最新的
NavigationView
。它有很多新功能,比如顶部放置。我们为新的
NavigationView
添加了
NavigationViewItemPresenter
类。当然,我们建议您使用最新版本的
NavigationView
。如果您确实想让它在不同的目标版本中具有相同的外观。您可以使用来自的NavigationView

啊,我不记得社区工具包中的NavigationView能够跨多个版本保留许多功能。谢谢,这非常有用。Community Toolkit中的NavigationView在使用不同的目标版本时具有相同的行为。
<DataTemplate x:Key="NavigationItemTemplate" x:DataType="models:ICollectionDataItem">
  <NavigationViewItem> <!--Bindings-->
  </NavigationViewItem>
</DataTemplate>
<DataTemplate x:Key="NavigationHeaderTemplate" x:DataType="models:ICollectionDataItem">
  <NavigationViewItemHeader> <!--Bindings-->
  </NavigationViewItemHeader>
</DataTemplate>
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;
}