GridView中每行的WPF上下文菜单

时间:2011-08-01 18:30:54

标签: wpf templates gridview mvvm contextmenu

我有一个GridView,它有几个列都绑定到我的ViewModel层中的数据结构,所以我想做的是

  1. 当用户点击GridView中的一行数据时会弹出一个上下文菜单(到目前为止,当我点击我放置的列的标题时,我才能显示上下文菜单它就开始了。
  2. 让上下文菜单的内容根据用户点击的当前行的内容而有所不同。
  3. 有什么建议吗?谢谢

1 个答案:

答案 0 :(得分:0)

您可以在ItemContainerStyle中设置ContextMenu,使其依赖于您可以使用的行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>