2012-05-01 75 views
4

我有一些ContextMenu與一些menuItems。 其中一個menuItem是「添加項目...」。當用戶選擇這個項目時,他應該看到具有可用項目列表的子菜單;ContextMenu項目可見性

這裏是我的ContextMenu的描述:

  • 添加項目
    • 項目1
    • 項目2
    • 項目3
    • 項目4
  • 刪除
  • 複製

的 '添加項目' 的的ItemsSource菜單項被綁定到一些觀察到的集合。 Collecion中的每個模型都有'Name'和'IsEnabled'(我有將bool轉換爲可見性的轉換器)。一切正常,除了'IsEnable'= false的項目不可見,但我可以看到有空間。 例如:讓說項目3具有IsEnable =假:

  • 添加項目

    • 項目1
    • 項目2

    • 項目4

我的bool2Vis轉換器在錯誤值的情況下返回'摺疊'。

Whay我做錯了?

這裏是文本菜單代碼:

<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

我覺得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> 
+0

謝謝!這解決了這個問題 – leonnoah