鼠标滚轮在功能区内的列表框上滚动 [WPF]

Mousewheel scrolling on a Listbox within a Ribbon [WPF]

我有一个带有两个选项卡的 功能区,其中一个选项卡包含一个列表框 ,其中包含自动生成的内容。

我想要鼠标滚轮滚动列表框内容并尝试了很多东西,但鼠标滚轮只能切换功能区选项卡。

下面是我尝试过的一种解决方案,我尝试从功能区释放鼠标控件并将其提供给列表框,但到目前为止,我一直没有成功。有没有正确的方法来做到这一点?我错过了什么吗?

xaml

<Ribbon Name="ribbonMain">
   <RibbonTab Header="Home">
      <RibbonGroup Header="Employees" Width="200">
         <ListBox x:Name="empListBox" ItemsSource="{Binding SelectedEmployees}" 
             Width="180" 
             MouseEnter="empListBox_MouseEnter" 
             MouseLeave="empListBox_MouseLeave">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <CheckBox Content="{Binding Path=FirstName}" IsChecked="{Binding IsChecked}"></CheckBox>
                    </DataTemplate>
                </ListBox.ItemTemplate>
          </ListBox>
     </RibbonGroup>

xaml.cs

 private void empListBox_MouseEnter(object sender, MouseEventArgs e)
    {
        if (sender is ListBox)
        {
            ribbonMain.ReleaseMouseCapture();
            ((ListBox)sender).CaptureMouse();
        }
    }

    private void empListBox_MouseLeave(object sender, MouseEventArgs e)
    {
        ((ListBox)sender).ReleaseMouseCapture();
        ribbonMain.CaptureMouse();
    }

我认为问题在于 ListBox 本身无法对鼠标捕获做任何事情。我认为实际上 inside ListBox 模板中的滚动查看器需要接收滚轮事件。

尝试像这样更改您的鼠标处理程序:

private void empListBox_MouseEnter(object sender, MouseEventArgs e)
{
    Mouse.Capture(empListBox, CaptureMode.SubTree);
}

private void empListBox_MouseLeave(object sender, MouseEventArgs e)
{
    empListBox.ReleaseMouseCapture();
}

这将使鼠标事件对持有捕获的元素*和*其后代元素可见,包括滚动查看器。