C# ScrollView中的WPF Datagrid捕获行详细信息组合框滚动事件

C# ScrollView中的WPF Datagrid捕获行详细信息组合框滚动事件,c#,wpf,combobox,datagrid,scrollviewer,C#,Wpf,Combobox,Datagrid,Scrollviewer,我在scrollviewer中有一个datagrid。可以展开my datagrid的行以显示详细信息并编辑行项目 为了在行数/行详细信息视图将网格推得过长时使“页面”滚动,我正在处理datagrid上的PreviewMouseWheel事件。直到我的行详细信息中有一个组合框,该组合框中有足够的项目,它也需要滚动 使用鼠标滚轮时,水滴列表将滚动,但外部数据网格也会滚动,有效地滚动水滴列表后面的内容,并将水滴列表留在错误的位置 我的PreviewMouseWheel事件处理程序执行以下操作: pr

我在scrollviewer中有一个datagrid。可以展开my datagrid的行以显示详细信息并编辑行项目

为了在行数/行详细信息视图将网格推得过长时使“页面”滚动,我正在处理datagrid上的PreviewMouseWheel事件。直到我的行详细信息中有一个组合框,该组合框中有足够的项目,它也需要滚动

使用鼠标滚轮时,水滴列表将滚动,但外部数据网格也会滚动,有效地滚动水滴列表后面的内容,并将水滴列表留在错误的位置

我的PreviewMouseWheel事件处理程序执行以下操作:

private void StampPartsDatagrid_PreviewMouseWheelForScrolling(object sender, MouseWheelEventArgs e)
{
    StampingScrollViewer.ScrollToVerticalOffset(StampingScrollViewer.VerticalOffset - e.Delta / 3);
}
我试图在组合框上捕获下拉/下拉事件,虽然这样做有效,但如果我将鼠标移到下拉列表之外并用滚轮滚动,页面将不会滚动

我浏览了很多关于MSDN的文章,但大部分都是关于在scrollviewer中让datagrid滚动的

有没有办法对预览滚动事件进行命中测试?我该不该用某种方法把鼠标困住/在滴水器上输入左键?我应该以不同的方式处理滚动吗

谢谢

*编辑* 我解决了这个问题。我对鼠标滚轮的行为想得太多了。通过查看Windows设置面板中的区域页面,其中有一个很长的组合列表要显示,我发现如果组合列表被删除,鼠标滚轮只会应用于删除的列表。将鼠标移到液滴列表外并用滚轮滚动没有效果

有鉴于此,我采用了相同的行为,捕获了drop open/drop close事件并控制外部滚动。我的新事件处理程序取自本文()如下:


如果您不希望删除
bDetailsComboDropped
字段,还可以尝试确定预览鼠标滚轮路由事件的来源。具体来说,检查e。获取对实际触发事件的WPF元素的引用(或者,如果您认为它更适合于此目的,则可以使用e.Source)

将其与递归函数结合使用,以检查父元素是否为组合框部分,或是否以根滚动查看器结束

(注意:您的带有布尔标志的解决方案实际上可能提供更高的性能,我只是在有人需要面向源代码的解决方案时发布了这篇文章,例如,是否有许多其他控件需要检查内部滚动等。)

private void StampPartsDatagrid_PreviewMouseWheelForScrolling(object sender, MouseWheelEventArgs e)
{
    if (!bDetailsComboDropped)
    { 
        StampingScrollViewer.ScrollToVerticalOffset(StampingScrollViewer.VerticalOffset - e.Delta / 3);
    }
}