【发布时间】:2020-06-25 10:08:21
【问题描述】:
我正在尝试通过将一些方法和属性添加到派生控件中来扩展标准 DataGrid 功能:
public class ExtendedGrid : DataGrid
{
...
}
但是,我仍然不清楚如何处理标题的鼠标事件。由于DataGridColumnHeader 不是可视化树的一部分(如果我错了请纠正我),将事件处理程序设置为MouseEvent 的唯一方法是在其上应用样式(How do I capture "Click" events on a DataGrid column headers)。
由于我正在扩展 DataGrid,因此我想在代码中保留实现,而不添加任何 XAML,在我看来,这在代码可读性方面是不一致的。因此,我编写了以下代码:
private void InitializeStyles()
{
Style headerStyle = new Style(typeof(DataGridColumnHeader));
headerStyle.Setters.Add(new EventSetter(MouseDownEvent, new MouseButtonEventHandler(OnColumnHeaderMouseDown)));
foreach(var column in Columns)
{
column.HeaderStyle = headerStyle;
}
}
此代码在 AutoGeneratedColumns 上调用,但效果不佳(例如,根本没有)。即使这样,它也会对设置标题的样式施加限制。
有没有办法在我的ExtendedGrid 中处理DataGridColumnHeader 鼠标事件而无需任何XAML?还是 XAML 样式总比搜索变通办法更好(而且可能过于复杂)?
【问题讨论】:
-
也许您正在寻找活动
GridViewColumnHeader.Click? -
不,我正在寻找 MouseDown 事件