2014-01-31 3 views
1

У меня есть контекстное меню для управления списком в моем приложении WPF. Я бы хотел, чтобы контекстные пункты меню включались, если пользователь щелкает правой кнопкой мыши на элементе listview, но отключает их, щелчок происходит в области списка списка. Спасибо MKСоздайте отдельное контекстное меню для listview и для элемента списка.

Обновление: это мое представление списка, которое работает, но я бы хотел отключить 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> 

В примере, ContextMenu создаются только для элементов, но не для всего управления.
Также Тег добавлен в DockPanel для доступа к исходному DataContext.


Ну, в случае GridView вам нужно переопределить стиль для ListViewItem, и связывают ContextMenu в StaticResource.

   <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.

Смежные вопросы