wpf - ContextMenu 项目可见性

标签 wpf contextmenu visibility

我有一些 ContextMenu 和一些 menuItems。
menuItems 之一是“添加项目...”。当用户选择这个项目时,他应该看到带有可用项目列表的子菜单;

这是我的上下文菜单的描述:

  • Add Item
    • Item 1
    • Item 2
    • Item 3
    • Item 4
  • Delete
  • Copy


'Add Item' menuItem 的 ItemsSource 绑定(bind)到某个可观察的集合。集合中的每个模型都有“名称”和“IsEnabled”(我有将 bool 转换为可见性的转换器)。一切正常,除了“IsEnable”= false 的项目不可见,但我可以看到那里的空间。
例如:假设第 3 项具有 IsEnable = false:

  • Add Item

    • Item 1
    • Item 2

    • Item 4



如果值为假,我的 bool2Vis 转换器会返回“已折叠”。

为什么我做错了?

这是上下文菜单代码:
<ContextMenu  x:Key="mainContextMenu" DataContext="{Binding Source={x:Static fw:UIMainManager.Instance},Path=layoutManager}">
        <MenuItem Header="Add Item" Name="addItemMenu" ItemsSource="{Binding ControlBoxItems}" >
            <MenuItem.ItemTemplate>
                <DataTemplate>
                    <MenuItem Header="{Binding ControlName}"  Visibility="{Binding IsEnabled,Converter={StaticResource boolToVisibilityConverter}}"
                                  Command="{Binding Source={x:Static fw:ApplicationCommands.AddControlToScene}}" CommandParameter="{Binding}"/>
                </DataTemplate>
            </MenuItem.ItemTemplate>
        </MenuItem>
        <MenuItem Header="Copy" Command="{Binding Source={x:Static fw:ApplicationCommands.Copy}}" />
        <MenuItem Header="Paste" Command="{Binding Source={x:Static fw:ApplicationCommands.Paste}}" />
        <MenuItem Header="Cut"  Command="{Binding Source={x:Static fw:ApplicationCommands.Cut}}" />
        <MenuItem Header="Duplicated" Command="{Binding Source={x:Static fw:ApplicationCommands.DuplicateControl}}" />
        <MenuItem Header="Delete" Command="{Binding Source={x:Static fw:ApplicationCommands.DeleteControl}}" />
    </ContextMenu>

最佳答案

我认为 MenuItem已折叠但不是 MenuItem 的 ItemContainer .试试这个:

<MenuItem Header="Add Item" Name="addItemMenu" ItemsSource="{Binding ControlBoxItems}">
    <MenuItem.ItemContainerStyle>
        <Style>
            <Setter Property="Visibility" Value="{Binding IsEnabled, Converter={StaticResource boolToVisibilityConverter}}" />
        </Style>
    </MenuItem.ItemContainerStyle>
    <MenuItem.ItemTemplate>
        <DataTemplate>
            <MenuItem Header="{Binding ControlName}"
                      Command="{Binding Source={x:Static fw:ApplicationCommands.AddControlToScene}}"
                      CommandParameter="{Binding}" />
        </DataTemplate>
    </MenuItem.ItemTemplate>
</MenuItem>

关于wpf - ContextMenu 项目可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10394988/

相关文章:

c# - 将 TabItem 添加到现有 TabControl WPF/MVVM

visual-studio-2010 - 如何修改项目文件的 Visual Studio 上下文菜单并向其添加命令

JavaFX 附加到 TextField 的右键单击菜单

javascript - 最初隐藏一个 div 以供以后显示

c# - WPF 事件的最佳模式是什么?

c# - 将子类绑定(bind)到属性

android - 如何从 ListView 获取数据到上下文菜单?

visual-studio - 在 SSRS 中交换两个图表的可见性,而不产生 Accordion 效果

scala - 是否可以在 Scala 中声明一个公共(public)字段

c# - 动画后执行命令