【问题标题】:How to set the header double click event in data grid如何在数据网格中设置标题双击事件
【发布时间】:2014-04-04 20:18:59
【问题描述】:

是否可以在后面的代码中执行以下操作(在数据网格中设置标题双击事件)?如果是,如何?我搜索的任何内容都没有显示可以访问数据网格标题的样式!

<DataGrid ...> 
    <DataGrid.Resources>
        <Style TargetType="DataGridColumnHeader">
            <EventSetter Event="MouseDoubleClick" Handler="OnTableDoubleClick" />
        </Style>
    </DataGrid.Resources>
    ...

非常感谢。

编辑

经过其他尝试,我也在从DataGrid派生的CustomDataGrid类的构造函数中尝试了这个:

        Style _style = new Style(typeof(DataGridColumnHeader));
        _style.BasedOn = Application.Current.Resources["DataGridColumnHeaderStyle"] as Style;
        _style.Setters.Add(new EventSetter(MouseDoubleClickEvent, new MouseButtonEventHandler(OnTableDoubleClick)));
        this.ColumnHeaderStyle = _style;

如果我很好理解我所做的这应该将双击事件添加到标题样式中,但实际上它什么也不做,这意味着处理程序不会在运行时调用。

【问题讨论】:

    标签: c# wpf events datagrid styles


    【解决方案1】:

    你需要在DataGridRowHeader上声明样式:

        <DataGrid>
            <DataGrid.Resources>
                <Style TargetType="DataGridRowHeader">
                    <EventSetter Event="MouseDoubleClick"
                                 Handler="DataGridRow_MouseDoubleClick"/>
                </Style>
            </DataGrid.Resources>
        </DataGrid>
    

    如果您在谈论列标题。将DataGridRowHeader 替换为DataGridColumnHeader

    【讨论】:

    • 对不起,我的错,因为速度我复制了错误的代码块。我实际上是指 DataGridColumnHeader。我更新了问题。无论如何,问题是我想从后面的代码而不是从 xaml 执行此操作,它似乎不起作用。
    • 因此,您需要在您尝试过但不起作用的代码后面显示您的代码。
    • 你为什么在代码后面这样做?您已经在样式中声明了资源。那么,为什么不只在那里声明事件设置器。此外,您也可以随时从 XAML 中执行 BasedOn
    • 因为样式是在应用程序级别定义的通用样式,因此我不能在样式中声明处理程序。我尝试在 XAML 中使用 BaseOn 在类级别定义“本地”样式,但这也不起作用:如果我定义自己的数据网格类,如“公共类 CustomDataGrid:DataGrid”并使用
    • 如果样式在 App 级别声明,则否。你总是可以基于那种风格。如果您可以在此处发布小示例代码以复制问题,那就太好了,因为您提到的问题有效。您在这里遗漏了一些无法通过问题中提供的信息进行追踪的内容。
    猜你喜欢
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多