跨Windows 10版本无法在NavigationView的项模板中实现相同的行为
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨Windows 10版本无法在NavigationView的项模板中实现相同的行为相关的知识,希望对你有一定的参考价值。
在我的UWP应用程序中尝试实现相同的视觉行为,我感到非常沮丧。这是我的问题:
我正在使用NavigationView,我想从ViewModel提供NavigationViewItem。我还想提供头文件,因此我创建了一个ICollectionDataItem接口并为NavigationViewItem和NavigationViewItemHeader实现了ViewModel,以便主视图模型向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; }
}
然后我为NavigationViewItem创建一个DataTemplate,为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;
}
这完全没问题......直到它没有。 Windows 10 SDK 1809中NavigationViewItem的默认样式与1803完全不同。虽然在第一个SDK中一切都很完美,但在第二个中它不能将NavigationHeaderTemplate识别为NavigationViewItemHeader,而是显示一个NavigationViewItem,其NavigationViewItemHeader为Content这是完全可选择的。
我可以想象如何为NavigationViewItem解决这个问题,我可以查看Windows版本,我可以为不同的版本设置不同的模板,但我的问题是:
如何向NavigationView提供ICollectionDataItem列表,然后使用xaml将其转换为NavigationViewItem(s)和NavigationViewItemHeader,并保证Windows 10 1803和1809中的相同行为(我不假装使用以前的版本) ?
也许你认为答案是显而易见的,亲自尝试,你会看到。
我真的很沮丧这个问题;任何帮助将不胜感激。
提前致谢
除了使用SplitView并实现自定义导航(这基本上是NavigationView所做的),我没有看到任何其他解决方案 - 如上所述,这似乎是操作系统级别的错误。
我查了最新的NavigationView
。它有很多新功能,如顶部放置。我们为新的NavigationViewItemPresenter
添加NavigationView
类。当然,我们建议您使用最新版本的NavigationView
。如果你想让它在不同的目标版本中具有相同的外观。您可以使用来自Community Tool Kit的NavigationView。
以上是关于跨Windows 10版本无法在NavigationView的项模板中实现相同的行为的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Windows 10 版本 1903 上安装 Chocolatey
无法在 Windows 10 版本中安装 keras 或 tensorflow - Anaconda
Windows 10 更新后VMware Workstation pro无法运行 (无需卸载原版本VM)
无法在 Windows 10 上安装带有 python 2.7 的 Django 版本 1.11.22
无法激活 Windows 应用商店应用程序(Visual Studio 2015、Windows 10 版本 1511)