ContextMenu项目可见性

时间:2012-05-01 07:48:44

标签: wpf contextmenu visibility

我有一些ContextMenu和一些menuItems。 其中一个menuItem是“Add Item ...”。当用户选择此项时,他应该看到包含可用项列表的子菜单;

这里是我的contextMenu:

的描述
  
      
  • 添加项目   
        
    • 第1项
    •   
    • 第2项
    •   
    • 第3项
    •   
    • 第4项
    •   
  •   
  • 删除
  •   
  • 复制
  •   

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

  
      
  • 添加项目

         
        
    • 第1项
    •   
    • 第2项

    •   
    • 第4项

    •   
  •   

我的bool2Vis转换器在假值的情况下返回'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 个答案:

答案 0 :(得分: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>