根菜单项可见性绑定

Root MenuItem Visibility binding

我需要根 MenuItem Collapsed 根据条件。我可以将根菜单的子 - MenuItem 设置为 Collapsed 但不是根菜单。

背景:根据设置,我需要 MenuItemsVisibleCollapsed。这种作品。对于 sub MenuItem 它完美地工作;

<Menu>
    <MenuItem  Header="Root Menu Item" >
        <MenuItem.Style>
            <Style TargetType="{x:Type MenuItem}" >
                <Setter Property="Visibility" Value="Visible" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Source={StaticResource MyResource}, Path=MySetting, UpdateSourceTrigger=PropertyChanged}" Value="False">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </MenuItem.Style>
        <MenuItem Header="Sub Menu Item">
            <MenuItem.Style>
                <Style TargetType="{x:Type MenuItem}" >
                    <Setter Property="Visibility" Value="Collapsed" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Source={StaticResource MyResource}, Path=MySetting, UpdateSourceTrigger=PropertyChanged}" Value="False">
                            <Setter Property="Visibility" Value="Collapsed" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </MenuItem.Style>
        </MenuItem>
    </MenuItem>
</Menu>

在 true 和 false 之间更改 MySetting 的值会使 "Sub Menu Item" 消失或出现,但对根菜单项没有影响。我不知道为什么。

对于这个简单的绑定,使用 IValueConverter 更好更容易,例如预先包含的 BooleanToVisibilityConverter.

用法示例:

<SomeParentElement.Resources>
    <BooleanToVisibilityConverter x:Key="BoolToVisConverter" />
</SomeParentElement.Resources>

<Menu Visibility="{Binding Path=MySetting, 
                           Source={StaticResource MyResource}, 
                           Converter={StaticResource BoolToVisConverter}}" />