Wpf 动态隐藏菜单项

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

我有一个用xaml构建的菜单,MenuItem的属性ItemTemplate设置为以下模板:

<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>