【问题标题】:WPF Context Menu for each Row in a GridViewGridView 中每一行的 WPF 上下文菜单
【发布时间】:2011-08-01 18:30:54
【问题描述】:

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

  1. 有一个上下文菜单,当用户单击 GridView 中的某一行数据时会弹出该菜单(到目前为止,我只能在单击我放置的列的标题时显示上下文菜单开启。
  2. 让上下文菜单的内容根据用户单击的当前行的内容而有所不同。

有什么建议吗?谢谢

【问题讨论】:

    标签: wpf templates gridview mvvm contextmenu


    【解决方案1】:

    您可以在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>
    

    【讨论】:

    • 我正在尝试在 Style.Triggers 部分和 DataTrigger 内部添加一个 DataTrigger 我有一个上下文菜单,但我仍然收到错误“‘上下文菜单’类型的值不能被添加到“SetterBaseCollection”类型的集合或字典中,对不起,我第一次在 WPF 中编程,所以我不知道这意味着什么,我错过了什么吗?
    • 添加了一些示例代码(希望也没有错,因为我在这里写的)...
    • @HB,如果我们创建上下文菜单的静态资源并设置作为一个值....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多