2014-01-31 38 views
1

我有我的WPF应用程序中的列表视图控件的工作上下文菜单。我想要启用上下文菜单项,如果用户右键单击列表视图项目,但禁用它们是点击发生在列表视图的面板区域。 谢谢 MK为列表视图和列表视图项目创建单独的上下文菜单

更新:这是我的列表视图的作品,但我想禁用MenuItems“删除”和“计算”,当用户点击面板区域。感谢您回应

  <ListView Name="lb_proplist" DisplayMemberPath ="Name" HorizontalAlignment="Left" ToolTip="Use right click to see more options" 
        ItemsSource="{Binding Converter={StaticResource FilterByPropTypeConverter}}" Margin="0,0,0,0" 
        ContextMenuOpening="ContextMenu_ContextMenuOpening" > 


      <ListView.ContextMenu> 
      <ContextMenu > 
       <MenuItem Name="cmi_addNew" Header="Add New" 
        Command="{Binding AddNewItemItem}" 
        CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}}" /> 
       <MenuItem Name="cmi_remove" Header="Remove" 
        Command="{Binding RemoveItem}" 
        CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, 
        Path=PlacementTarget.SelectedItem}" /> 
       <MenuItem Name="cmi_calculate" Header="Calculate" 
        Command="{Binding CalculateItem}" 
        CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, 
        Path=PlacementTarget.SelectedItem}" /> 

      </ContextMenu> 
      </ListView.ContextMenu> 
      <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="200"/> 
      </GridView> 
      </ListView.View> 
     </ListView> 
+0

你可以发布你已经尝试但不工作的代码吗? –

回答

0

好,这可以通过使用ItemsTemplate属性的ListView来完成:

<ListView.ItemTemplate> 
    <DataTemplate> 
     <DockPanel Tag = "{Binding DataContext, ElementName=myListView}"> 

      <TextBlock Text="{Binding}"/> 

      <DockPanel.ContextMenu> 
       <ContextMenu> 
        <MenuItem Header="Local Item 1" 
           Command="{Binding Path=PlacementTarget.Tag.CommandName, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"/> 
        <MenuItem Header="Local Item 2"/> 
       </ContextMenu> 
      </DockPanel.ContextMenu> 

     </DockPanel> 
    </DataTemplate> 
</ListView.ItemTemplate> 

在例子中,文本菜单只为项目创建的,但不是整个控制。
此外,标记被添加到DockPanel访问原始DataContext。


那么,在的GridView的情况下,你需要重写样式ListViewItem的,并结合文本菜单静态资源

   <ListView.Resources> 
        <ContextMenu x:Key="ItemContextMenu"> 
         <MenuItem Header="Add New"/> 
        </ContextMenu> 
       </ListView.Resources> 
       <ListView.ItemContainerStyle> 
        <Style TargetType="{x:Type ListViewItem}"> 
         <Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}"/> 
        </Style> 
       </ListView.ItemContainerStyle> 

请看看this article and answer

相关问题