【发布时间】:2019-03-21 19:21:48
【问题描述】:
如何正确使用 UWP NavigationView 的 MenuItemTemplateSelector? 我从互联网上查找了一些示例并尝试了它们(代码如下)。但它不起作用,因为它应该只打印类名。 目前我在 Windows 版本 1809 上运行。我已经尝试在 listView 中使用相同的模板并且它可以工作,所以我想知道 NavigationView 中是否可能存在错误,或者我错过了什么? 在此先感谢:)
这是我的代码的样子:
创建模板选择器:
public class NavigationItemTemplateSelector : DataTemplateSelector
{
public DataTemplate DriveTemplate { get; set; }
public DataTemplate PathTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
return SelectTemplateCore(item);
}
protected override DataTemplate SelectTemplateCore(object item)
{
if (item is Drive) return DriveTemplate;
if (item is FileSystemElement) return PathTemplate;
return base.SelectTemplateCore(item);
}
}
在你的页面资源中加入这样的东西:
<Page.Resources>
<DataTemplate x:Key="FileSystemDataTemplate" x:DataType="entities:FileSystemElement">
<StackPanel>
<TextBlock Text="{x:Bind Name}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="DriveDataTemplate" x:DataType="entities:Drive">
<StackPanel>
<SymbolIcon Symbol="{x:Bind Icon}" />
<TextBlock Text="{x:Bind Name}" />
</StackPanel>
</DataTemplate>
<entities:NavigationItemTemplateSelector x:Key="NVMenuItemsSelector"
DriveTemplate="{StaticResource DriveDataTemplate}"
PathTemplate="{StaticResource FileSystemDataTemplate}">
</entities:NavigationItemTemplateSelector>
</Page.Resources>
告诉 NavigationView 它应该使用这个 TemplateSelector
<NavigationView MenuItemsSource="{x:Bind ViewModel.NavigationItems, Mode=OneWay}"
MenuItemTemplateSelector="{StaticResource NVMenuItemsSelector}">
【问题讨论】:
-
请参考这个案例reply。
标签: c# xaml uwp windows-10