我在类中有以下带有订阅的事件,这些事件派生自DataGrid
private void SubscribeHeaders(DependencyObject sender = null)
{
sender = sender ?? this;
for (int childIndex = 0; childIndex < VisualTreeHelper.GetChildrenCount(sender); childIndex++)
{
DependencyObject child = VisualTreeHelper.GetChild(sender, childIndex);
if (child is DataGridColumnHeader colHeader)
{
//Subscribe column headers
colHeader.PreviewMouseLeftButtonDown += (obj, e) => OnColumnHeaderMouseDown(obj, e);
colHeader.PreviewMouseLeftButtonUp += (obj, e) => OnColumnHeaderMouseUp(obj, e);
colHeader.MouseEnter += (obj, e) => OnColumnHeaderMouseEnter(obj, e);
colHeader.MouseLeave += (obj, e) => OnColumnHeaderMouseLeave(obj, e);
}
else if (child is DataGridRowHeader rowHeader)
{
//Subscribe row headers
}
else
{
SubscribeHeaders(child);
}
}
}一切都绑定得很好,但是当鼠标按下时,OnColumnHeaderMouseEnter(obj, e)不会被执行。这篇文章(WPF Mousedown => No MouseLeave Event)讲述了鼠标捕获,但这个块
if (Mouse.Captured != null)
Mouse.Captured.ReleaseMouseCapture();不会更改任何内容,因为Mouse.Captured始终为空。
我正在尝试实现的是通过按住鼠标左键从选择的开始到结束来选择一系列DataGrid列。我的想法是对鼠标按钮和标题之间的移动做出反应。
如何在按下鼠标按钮的情况下捕获DataGridColumnHeader之间的移动?
发布于 2020-06-26 20:29:00
我认为使用ColumnHeaderDragStarted会是一个好主意。
https://stackoverflow.com/questions/62592985
复制相似问题