鼠标滚轮在功能区内的列表框上滚动 [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();
}
这将使鼠标事件对持有捕获的元素*和*其后代元素可见,包括滚动查看器。
我有一个带有两个选项卡的 功能区,其中一个选项卡包含一个列表框 ,其中包含自动生成的内容。
我想要鼠标滚轮滚动列表框内容并尝试了很多东西,但鼠标滚轮只能切换功能区选项卡。
下面是我尝试过的一种解决方案,我尝试从功能区释放鼠标控件并将其提供给列表框,但到目前为止,我一直没有成功。有没有正确的方法来做到这一点?我错过了什么吗?
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();
}
这将使鼠标事件对持有捕获的元素*和*其后代元素可见,包括滚动查看器。