跨Windows 10版本无法在NavigationView的项模板中实现相同的行为

问题描述 投票:4回答:2

在我的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中的相同行为(我不假装使用以前的版本) ?

也许你认为答案是显而易见的,亲自尝试,你会看到。

我真的很沮丧这个问题;任何帮助将不胜感激。

提前致谢

c# xaml uwp
2个回答
2
投票

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.