以编程方式 WPF DataGrid 行双击事件

Posted

技术标签:

【中文标题】以编程方式 WPF DataGrid 行双击事件【英文标题】:WPF DataGrid row double click event programmatically 【发布时间】:2014-05-12 11:32:11 【问题描述】:

我需要以编程方式创建一个 DataGrid 并需要向它添加一个双击行事件。这是如何在 C# 中完成的?我找到了这个;

myRow.MouseDoubleClick += new RoutedEventHandler(Row_DoubleClick);

虽然这对我不起作用,因为我将 DataGrid.ItemsSource 绑定到一个集合而不是手动添加行。

【问题讨论】:

订阅myGrid.MouseDoubleClick 然后在事件处理程序中检查点击是否发生在一行(或选择了哪一行)不是最简单的吗? 除非通过“以编程方式创建 DataGrid”(顺便说一句,从字面上看,这意味着 XAML 文件中没有 DataGrid 元素),否则您的意思是“将 DataGrid.ItemsSource 绑定到一个集合和不要手动添加行”,我怀疑这就是你的意思,尤其是。根据您在“2014 年 4 月 1 日 16:37”将 Rohit Vats 的 A 标记为 Accepted A,此 Q 是“***.com/questions/3120616/…”的欺骗。 这能回答你的问题吗? WPF datagrid selected row clicked event ? 【参考方案1】:

您可以在 XAML 中通过在其资源部分下添加 DataGridRow 的默认样式并在此处声明事件设置器来做到这一点:

<DataGrid>
    <DataGrid.Resources>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseDoubleClick" Handler="Row_DoubleClick"/>
        </Style>
    </DataGrid.Resources>
</DataGrid>

如果想在后面的代码中执行此操作。在网格上设置x:Name,以编程方式创建样式并将样式设置为RowStyle。

<DataGrid x:Name="dataGrid"/>

在后面的代码中:

Style rowStyle = new Style(typeof(DataGridRow));
rowStyle.Setters.Add(new EventSetter(DataGridRow.MouseDoubleClickEvent,
                         new MouseButtonEventHandler(Row_DoubleClick)));
dataGrid.RowStyle = rowStyle;

有事件处理器的例子:

  private void Row_DoubleClick(object sender, MouseButtonEventArgs e)
  
     DataGridRow row = sender as DataGridRow;
     // Some operations with this row
  

【讨论】:

谢谢,我会重试的。 谢谢!!如果有人需要此代码用于 PowerShell,请复制此代码:gist.github.com/PatrickGrub/94841e76b4ba45beb28a4fab94c29120 这仅回答了 OP Q 的“向其添加双击行事件”部分(当然,除非通过“以编程方式创建 DataGrid”,他的意思是“将 DataGrid.ItemsSource 绑定到一个集合,而不是手动添加行,我怀疑这是他的意思)。”。我只是说,从字面上看,“以编程方式创建 DataGrid”意味着 XAML 文件中不会有 DataGrid 元素。 就像注意一样,sender 是一个 DataGrid,而不是一行。您可以使用 DataGrid.SelectedIndex 或任何其他访问器来管理处理程序上的操作

以上是关于以编程方式 WPF DataGrid 行双击事件的主要内容,如果未能解决你的问题,请参考以下文章

WPF DataGrid - 以编程方式将单元格设置为编辑模式

如何处理 Kendo UI Grid 行双击事件

WPF DataGrid 双击行 获得绑定数据

我如何在WPF DataGrid上处理单元格双击事件,相当于Windows DataGrid的事件?

以编程方式将列和行添加到 WPF Datagrid

以编程方式为 DataGrid 创建 WPF DataGridTemplateColumn