右键菜单项可见性

4
我有一个ContextMenu和一些menuItems。其中一个menuItems是“添加项目...”。当用户选择此项时,应该看到可用项目列表的子菜单。
下面是我的ContextMenu的描述:
  • 添加项目
    • 项目1
    • 项目2
    • 项目3
    • 项目4
  • 删除
  • 复制
“添加项目” menuItem 的 ItemsSource 绑定到某个可观察集合。集合中的每个模型都有“名称”和“IsEnabled”(我有一个转换器,将bool值转换为visibility)。除了具有“IsEnable”= false的项目不可见,但我可以看到它们的空间之外,一切都正常运行。
例如:假设Item 3的IsEnable = false:
  • 添加项目
    • 项目1
    • 项目2
    • 项目4
我的bool2Vis转换器在false值的情况下返回“Collapsed”。
我做错了什么?
以下是ContextMenu代码:
<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>
1个回答

1
我认为 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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接