如何使用鼠标滚轮在 scrollviewer 中滚动列表框
how can I scroll listbox inside scrollviewer using mouse wheel
xaml:
<ScrollViewer HorizontalAlignment="Center" PreviewMouseWheel="myScrollViewer_PreviewMouseWheel" Name="myScrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">
<Grid Width="1200">
<ListBox ScrollViewer.VerticalScrollBarVisibility="Visible" MouseMove="listbox_MouseMove" Background="AliceBlue" Height="350" Width="200" HorizontalAlignment="Center" Name="listbox"/>
</Grid>
</ScrollViewer>
cs:
private void myScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (e.Delta < 0) // wheel down
{
if (myScrollViewer.HorizontalOffset + e.Delta > 0)
{
myScrollViewer.ScrollToHorizontalOffset(myScrollViewer.HorizontalOffset + e.Delta);
}
else
{
myScrollViewer.ScrollToLeftEnd();
}
}
else //wheel up
{
if (myScrollViewer.ExtentWidth > myScrollViewer.HorizontalOffset + e.Delta)
{
myScrollViewer.ScrollToHorizontalOffset(myScrollViewer.HorizontalOffset + e.Delta);
}
else
{
myScrollViewer.ScrollToRightEnd();
}
}
}
现在鼠标滚轮事件 scrollviewer 正在滚动,如果我的鼠标经过 ListBox。我想要:如果我的鼠标经过 ListBox 并停留一段时间(可能 1 或 2 秒),滚动应该移动到 ListBox。如果鼠标没有在 ListBox 上停留一段时间(1 或 2 秒),则滚动不应移动到 ListBox。 ScrollViewer中可能存在多个ListBox。
将其添加到您的列表框中:
ScrollViewer.CanContentScroll="True"
xaml:
<ScrollViewer HorizontalAlignment="Center" PreviewMouseWheel="myScrollViewer_PreviewMouseWheel" Name="myScrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">
<Grid Width="1200">
<ListBox ScrollViewer.VerticalScrollBarVisibility="Visible" MouseMove="listbox_MouseMove" Background="AliceBlue" Height="350" Width="200" HorizontalAlignment="Center" Name="listbox"/>
</Grid>
</ScrollViewer>
cs:
private void myScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (e.Delta < 0) // wheel down
{
if (myScrollViewer.HorizontalOffset + e.Delta > 0)
{
myScrollViewer.ScrollToHorizontalOffset(myScrollViewer.HorizontalOffset + e.Delta);
}
else
{
myScrollViewer.ScrollToLeftEnd();
}
}
else //wheel up
{
if (myScrollViewer.ExtentWidth > myScrollViewer.HorizontalOffset + e.Delta)
{
myScrollViewer.ScrollToHorizontalOffset(myScrollViewer.HorizontalOffset + e.Delta);
}
else
{
myScrollViewer.ScrollToRightEnd();
}
}
}
现在鼠标滚轮事件 scrollviewer 正在滚动,如果我的鼠标经过 ListBox。我想要:如果我的鼠标经过 ListBox 并停留一段时间(可能 1 或 2 秒),滚动应该移动到 ListBox。如果鼠标没有在 ListBox 上停留一段时间(1 或 2 秒),则滚动不应移动到 ListBox。 ScrollViewer中可能存在多个ListBox。
将其添加到您的列表框中:
ScrollViewer.CanContentScroll="True"