简体   繁体   English

C# WPF DataGrid 上下文菜单单击的列

[英]C# WPF DataGrid Contextmenu clicked column

I have simply Datagrid and context menu.我只有 Datagrid 和上下文菜单。 I want to get information on what column of datagrid context menu appears.我想获取有关出现数据网格上下文菜单的哪一列的信息。 In WinWorms I found solution that MouseClick shows context menu manually and remember column在 WinWorms 中,我找到了 MouseClick 手动显示上下文菜单并记住列的解决方案

if (e.Button != MouseButtons.Right) return;
contextMenuStrip1.Show(dataGridView1, e.Location);
_ClickedColumn = dataGridView1.HitTest(e.X, e.Y).ColumnIndex;

How can I get column number in wpf datagrid?如何在 wpf 数据网格中获取列号?

您可以尝试以下操作以获得列索引。

var index = dataGridName.CurrentColumn;

在menuItem单击或ContextMenuOpening事件中,只需检查DataGrid.CurrentColumn

I've been messing with this all afternoon and came up with a solution that seems to work.我整个下午都在搞砸这个问题,并想出了一个似乎可行的解决方案。

XAML XAML

       <DataGrid Name="dgCSVExample"  ItemsSource="{Binding}"  >
            <DataGrid.Resources>
                <Style TargetType="DataGridColumnHeader">
                    <EventSetter Event="ContextMenuOpening" Handler="DataGridColumnHeader_ContextMenuOpening"/>
                </Style>
            </DataGrid.Resources>

CS CS

private int _LastClickedColumn = 0;

    private void DataGridColumnHeader_ContextMenuOpening(object sender, ContextMenuEventArgs e)
    {
        _LastClickedColumn = ((DataGridColumnHeader)sender).TabIndex;

        Debug.WriteLine("hide clicked");
    }

Then in the context menu option click event I was able to access the DataTable (or it would work with a List object as well) by doing this:然后在上下文菜单选项单击事件中,我可以通过执行以下操作访问 DataTable(或者它也可以与 List 对象一起使用):

    private void miHide_Click(object sender, RoutedEventArgs e)
    {
        DataColumn dc = _dtSampleCSV.Columns[_LastColumnClicked];
        //process data here
        Debug.WriteLine("miHide clicked");
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM