Wpf 动态隐藏菜单项
我有一个用xaml构建的菜单,MenuItem的属性ItemTemplate设置为以下模板:Wpf 动态隐藏菜单项,wpf,xaml,menu,Wpf,Xaml,Menu,我有一个用xaml构建的菜单,MenuItem的属性ItemTemplate设置为以下模板: <HierarchicalDataTemplate x:Key="MenuItemTemplate" DataType="{x:Type mainMenu:MenuItem}" ItemsSource="{Binding ChildMenuItems}"> <MenuItem Command="{Binding Command}" CommandParameter="{Bin
<HierarchicalDataTemplate x:Key="MenuItemTemplate" DataType="{x:Type mainMenu:MenuItem}" ItemsSource="{Binding ChildMenuItems}">
<MenuItem Command="{Binding Command}" CommandParameter="{Binding CommandParameter}" Header="{Binding Path=Header}" Visibility="{Binding Visible, Converter={converter:BooleanToVisibilityConverter}}" />
</HierarchicalDataTemplate>
我怀疑您正在从转换器返回可见性。隐藏。相反,返回
可见性。折叠
发件人:
此外,WPF提供了BooleantVisibilityConverter
,您不需要重新定义它,除非做一些额外的事情。您可以像这样在“应用程序资源”部分下添加资源,并使用:
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
您不应该使用层次数据模板
来定义子菜单项。相反,请尝试使用MenuItem.ItemsSource
属性:
<DataTemplate x:Key="MenuItemTemplate" DataType="{x:Type mainMenu:MenuItem}">
<MenuItem Command="{Binding Command}" CommandParameter="{Binding CommandParameter}"
Header="{Binding Path=Header}" Visibility="{Binding Visible, Converter={
converter:BooleanToVisibilityConverter}}"
ItemsSource="{Binding ChildMenuItems}" />
</DataTemplate>
更新>>>
是的,很抱歉,您需要将样式中的子MenuItem
属性设置为MenuItem.ItemContainerStyle
。与其在这里全部解释,我更愿意引导您进入Lester在MSDN上的WPF\SL博客页面,该页面解释了如何做好这项工作
此外,如果要对菜单项进行数据绑定,那么最好从数据绑定集合中删除相关项,而不是尝试设置可见性。UI看起来是一样的,但要简单得多。如果可以的话,最好在WPF中操作数据元素,而不是UI元素。我没有使用绑定进行测试,但我以前在样式中成功地使用了绑定
<Menu>
<Menu.Resources>
<Style TargetType="MenuItem">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</Menu.Resources>
<MenuItem Header="ONe" />
<MenuItem Header="Two" />
<MenuItem Header="Three" />
</Menu>
我正在返回可见性。CollapsedI还会尝试关闭IsEnabled、IsitTestVisible。。。不知道为什么它没有折叠,也没有工作下一步我会尝试风格的菜单上的目标类型的MenuItem。但这可能不会比上次的评论更好。
<Menu>
<Menu.Resources>
<Style TargetType="MenuItem">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</Menu.Resources>
<MenuItem Header="ONe" />
<MenuItem Header="Two" />
<MenuItem Header="Three" />
</Menu>