在我的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所做的),我没有看到任何其他解决方案 – 如上所述,这似乎是操作系统级别的错误.

标签: c, xaml, uwp

相关文章推荐

添加新评论,含*的栏目为必填