【问题标题】:Create separate context menu for listview and for listview item为列表视图和列表视图项创建单独的上下文菜单
【发布时间】:2014-01-31 04:22:49
【问题描述】:

我的 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>

【问题讨论】:

  • 您可以发布您尝试过但无法正常工作的代码吗?

标签: wpf listview contextmenu


【解决方案1】:

这可以使用 ListView 的 ItemsTemplate 属性来完成:

<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 仅为项目创建,而不是为整个控件创建。
此外,Tag 被添加到 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2013-06-11
    相关资源
    最近更新 更多