C# WPF 通过单个处理程序处理来自多个、动态生成数据网格的双击事件

发布于 2024-12-09 21:21:03 字数 310 浏览 0 评论 0原文

在我当前的实现中,我动态生成选项卡和网格。

基本上,需要通过双击先前网格的任意行来创建新网格,并使用该行数据进行其他证明。

this.AddHandler(DataGrid.MouseDoubleClickEvent, new RoutedEventHandler    (Generic_DoubleClick));    

这可以处理任何双击,即使是在网格之外,而不是专门针对网格。

我需要找到一个可以将行值专门返回到该网格的处理程序。请提出解决方法或更简单的方法来执行此操作。

谢谢。

In my current implementation, I spawn tabs and grids dynamically.

Basically, a new grid needs to be created by a double click on a any row of a previous grid and use the row data for other provessing.

this.AddHandler(DataGrid.MouseDoubleClickEvent, new RoutedEventHandler    (Generic_DoubleClick));    

This handles for any double click even outside the grid and not specifically for the grid.

I need to find a handler which can return the row values specifically to that grid. Please suggest a workaround or a easier way of doing this.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

对你再特殊 2024-12-16 21:21:03

处理数据网格的数据网格行中的双击路由事件。

   <tk:DataGrid>
        <tk:DataGrid.Resources>
            <Style TargetType="{x:Type tk:DataGridRow}">
                <EventSetter Event="MouseDoubleClick"
                             Handler="DataGridRow_MouseDoubleClick"/>
            </Style>
        </tk:DataGrid.Resources>
        <tk:DataGrid.ItemsSource>
            <x:Array Type="{x:Type TextBlock}">
                <TextBlock Text="1" Tag="1.1"/>
                <TextBlock Text="2" Tag="1.2"/>
                <TextBlock Text="3" Tag="1.3"/>
                <TextBlock Text="4" Tag="1.4"/>
            </x:Array>
        </tk:DataGrid.ItemsSource>
        <tk:DataGrid.Columns>
            <tk:DataGridTextColumn Header="Text" Binding="{Binding Text}"/>
            <tk:DataGridTextColumn Header="Tag" Binding="{Binding Tag}"/>
        </tk:DataGrid.Columns>
    </tk:DataGrid>

在 Bonus后面的代码中,

    private void DataGridRow_MouseDoubleClick(
           object sender, MouseButtonEventArgs e)
    {
        var dgRow = sender as Microsoft.Windows.Controls.DataGridRow;
        var cellContentElement = e.OriginalSource as UIElement;
    }

cellContentElement 是双击该行的单元格的内容元素...例如,在 DataGridTextColumn 的情况下,它将是 TextBlock< /代码> 在单元格中。

Handle the double click routed event from datagrid row of the datagrid.

   <tk:DataGrid>
        <tk:DataGrid.Resources>
            <Style TargetType="{x:Type tk:DataGridRow}">
                <EventSetter Event="MouseDoubleClick"
                             Handler="DataGridRow_MouseDoubleClick"/>
            </Style>
        </tk:DataGrid.Resources>
        <tk:DataGrid.ItemsSource>
            <x:Array Type="{x:Type TextBlock}">
                <TextBlock Text="1" Tag="1.1"/>
                <TextBlock Text="2" Tag="1.2"/>
                <TextBlock Text="3" Tag="1.3"/>
                <TextBlock Text="4" Tag="1.4"/>
            </x:Array>
        </tk:DataGrid.ItemsSource>
        <tk:DataGrid.Columns>
            <tk:DataGridTextColumn Header="Text" Binding="{Binding Text}"/>
            <tk:DataGridTextColumn Header="Tag" Binding="{Binding Tag}"/>
        </tk:DataGrid.Columns>
    </tk:DataGrid>

In code behind

    private void DataGridRow_MouseDoubleClick(
           object sender, MouseButtonEventArgs e)
    {
        var dgRow = sender as Microsoft.Windows.Controls.DataGridRow;
        var cellContentElement = e.OriginalSource as UIElement;
    }

Bonus is cellContentElement is the content element of the cell that was double clicked on the row ... e.g. in case of DataGridTextColumn it will be TextBlock in the cell.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文