[英]TemplateSelector for UWP NavigationView
如何正确使用MenuItemTemplateSelector进行UWP NavigationView? 我从互联网上查了一些样本并尝试了它们(下面的代码)。 但它不起作用,因为它应该只打印类名。 目前我在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}">
看看这个链接。
无法在NavigationView MenuItemTemplate中绑定Icon属性
我相信在ContentPresenter中包装StackPanels可以解决您的问题。
<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>
在查看上面的链接后,我决定在我的模板中放置一个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作为第一个孩子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.