WPF 从 ListViewItem 上的 ContextMenu 获取引用的项目

标签 wpf contextmenu

我在每个具有 Click 事件的 ListViewItem 上都有一个带有 ContextMenuListView, 如何在事件处理程序中检测在此 ContextMenu 中单击了哪个项目? 我需要项目ID

 <Style TargetType="{x:Type ListViewItem}">

。 . .

 <Setter Property="Control.Template">
                <Setter.Value>
                    <ControlTemplate TargetType="tv:TreeListViewItem">
                        <Grid>
                            <Grid.ContextMenu>
                                <ContextMenu>
                                    <MenuItem Header="Open in current tab" Click="MenuItemCurrentTab_Click"/>
                                    <MenuItem Header="Open in new tab" Click="MenuItemNewTab_Click"/>
                                </ContextMenu>
                            </Grid.ContextMenu>

最佳答案

this线程..

按照与链接中的答案相同的方式

<Grid.ContextMenu> 
    <ContextMenu> 
        <MenuItem Header="Open in current tab"
                  Click="MenuItemCurrentTab_Click"
                  CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Parent}"/>

...

private void MenuItemCurrentTab_Click(object sender, RoutedEventArgs e)
{
    MenuItem menuItem = sender as MenuItem;
    if (menuItem != null)
    {
        ContextMenu parentContextMenu = menuItem.CommandParameter as ContextMenu;
        if (parentContextMenu != null)
        {
            ListViewItem listViewItem = parentContextMenu.PlacementTarget as ListViewItem;
        }
    } 
}

更新

添加此项以从 Grid 中获取父 ListViewItem

public T GetVisualParent<T>(object childObject) where T : Visual
{
    DependencyObject child = childObject as DependencyObject;
    while ((child != null) && !(child is T))
    {
        child = VisualTreeHelper.GetParent(child);
    }
    return child as T;
}

private void MenuItemCurrentTab_Click(object sender, RoutedEventArgs e)
{
    MenuItem menuItem = sender as MenuItem;
    if (menuItem != null)
    {
        ContextMenu parentContextMenu = menuItem.CommandParameter as ContextMenu;
        if (parentContextMenu != null)
        {
            Grid grid = parentContextMenu.PlacementTarget as Grid;
            ListViewItem listViewItem = GetVisualParent<ListViewItem>(grid);
        }
    } 
}

关于WPF 从 ListViewItem 上的 ContextMenu 获取引用的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4015882/

相关文章:

c# - 为Caliburn.Micro Action Message指定自定义防护属性

java - Javas 在 2011 年对 Winforms/WPF/Silverlight 的回答是什么

wpf - WPF,将XAML文件移动到另一个项目

wpf - MVVM样式的TreeView元素上的ContextMenu

android - 在 if block 中使用手动创建的 id 而不是系统 id

c# - 如何将小工具集成到我的 .NET 应用程序中

wpf - 单击模板中的按钮时如何选择 ListBoxItem?

javascript - 在 ReactJS 中禁用上下文菜单

javascript - Chrome 上下文菜单子(monad)项功能同时启动

windows - 在没有 MultipleInvokePromptMinimum 的情况下通过上下文菜单打开超过 15 个文件