Контекстное меню WPF для каждой строки в GridView - PullRequest
0 голосов
/ 01 августа 2011

У меня есть GridView, который имеет несколько столбцов, которые все связаны со структурой данных в моем слое ViewModel, поэтому я хочу, чтобы у

  1. было контекстное меню, которое будет всплыватькогда пользователь щелкает по одной из строк данных в GridView (до сих пор я мог отображать контекстное меню только при нажатии на заголовок столбца, на котором я его поместил.
  2. Содержимое контекстного меню зависит от содержимого текущей строки, на которую щелкнул пользователь.

Есть предложения? спасибо

1 Ответ

0 голосов
/ 01 августа 2011

Вы можете установить ContextMenu в ItemContainerStyle, чтобы сделать его зависимым от ряда, в котором вы можете использовать DataTriggers.


Редактировать: структура должна принимать следующую форму, если вы решите поменять весь ContextMenu на условие:

<Style TargetType="{x:Type ListViewItem}">
     <Style.Resources>
          <ContextMenu x:Key="DefaultMenu">
               <!-- Rest of menu here -->
          </ContextMenu>
          <ContextMenu x:Key="NonDefaultMenu">
               <!-- Rest of menu here -->
          </ContextMenu>
     </Style.Resources>
     <Style.Triggers>
         <DataTrigger Binding="{Binding SomeProperty}" Value="SomeValue">
             <Setter Property="ContextMenu" Value="{StaticResource NonDefaultMenu}"/>
         </DataTrigger>
     </Style.Triggers>
     <Setter Property="ContextMenu" Value="{StaticResource DefaultMenu}"/>
</Style>

Как правило, вы также можете определить ContextMenu на месте, но если вы добавите обработчики событий, это приведет к ошибке, синтаксис будет:

 <Setter Property="ContextMenu">
      <Setter.Value>
          <ContextMenu>
              <!-- Rest of menu here -->
          </ContextMenu>
      </Setter.Value>
 </Setter>
...