如何正确地将MenuItemTemplateSelector用于UWP NavigationView?我已经从互联网上找到了一些样本并试用了它们(代码如下)。但是它没有工作,因为它应该只打印类名。目前im运行在Windows版本1809上。我已经尝试过在listView中使用相同的模板,它可以工作,所以我想知道NavigationView中是否有bug,或者我遗漏了什么?(预先谢谢:)
这就是我的代码的样子:
创建模板选择器:
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}">

发布于 2019-03-22 10:44:24
在查看了上面的链接之后,我决定将一个NavigationViewItem放在我的模板中
<DataTemplate x:Key="DriveDataTemplate" x:DataType="entities:Drive">
<NavigationViewItem Icon="{x:Bind SymbolIcon}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind Name}" />
</StackPanel>
</NavigationViewItem>
</DataTemplate>而且它是有效的。看来你得把NavigationViewItem当第一个孩子了。
发布于 2019-03-21 20:53:10
看看这个链接。
Cannot bind Icon property in NavigationView MenuItemTemplate
我相信将StackPanels封装在ContentPresenter中会解决您的问题。
<DataTemplate x:Key="FileSystemDataTemplate" x:DataType="entities:FileSystemElement">
<ContentPresenter>
<StackPanel>
<TextBlock Text="{x:Bind Name}" />
</StackPanel>
</ContentPresenter>
</DataTemplate>
<DataTemplate x:Key="DriveDataTemplate" x:DataType="entities:Drive">
<ContentPresenter>
<StackPanel>
<SymbolIcon Symbol="{x:Bind Icon}" />
<TextBlock Text="{x:Bind Name}" />
</StackPanel>
</ContentPresenter>
</DataTemplate>https://stackoverflow.com/questions/55287867
复制相似问题