[英]Allow vertical scrolling of outer ScrollViewer inside inner horizontal-scrolling ScrollViewer
当您在ScrollViewer中拥有ScrollViewer时,使用滚轮滚动仅限于内部滚动。 当它们具有相同的“方向”时,这是有道理的。 但是当外部只允许垂直滚动,而内部只允许水平滚动时,我希望内部鼠标内部的鼠标滚轮滚动可以在外部ScrollViewer中垂直滚动。 没有。 有没有办法做到这一点?
在以下代码中,尝试在红色字母区域内使用滚轮:
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<TextBlock>aaaaaaaaaaaaaaaaaa</TextBlock>
<ScrollViewer VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">
<StackPanel >
<TextBlock Foreground="Red">aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccc dddddddddddddddddddddd eeeeeeeeeeeeeeeeeeeee fffffffffffffffff ggggggggggggggggggggggg</TextBlock>
<TextBlock Foreground="Red">aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccc dddddddddddddddddddddd eeeeeeeeeeeeeeeeeeeee fffffffffffffffff ggggggggggggggggggggggg</TextBlock>
<TextBlock Foreground="Red">aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccc dddddddddddddddddddddd eeeeeeeeeeeeeeeeeeeee fffffffffffffffff ggggggggggggggggggggggg</TextBlock>
<TextBlock Foreground="Red">aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccc dddddddddddddddddddddd eeeeeeeeeeeeeeeeeeeee fffffffffffffffff ggggggggggggggggggggggg</TextBlock>
</StackPanel>
</ScrollViewer>
</StackPanel>
</ScrollViewer>
如果可以使用后台代码,则可以为“子级” ScollViewer
的PreviewMouseWheel
事件创建一个事件处理程序,并且在该事件处理程序中,可以将MouseWheelEventArgs
信息传递给“父级” ScrollViewer
以引发自己的MouseWheel
事件。
首先,将对XAML进行一些小的更改:
给“父级” ScrollViewer
命名,以便可以从后面的代码中引用它:
<ScrollViewer x:Name="parentScrollViewer"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
为“子级” ScrollViewer
的PreviewMouseWheel
事件创建事件处理程序:
<ScrollViewer VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Auto"
PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
最后,在事件处理程序中实现代码以引发“父” MouseWheel
事件:
private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
var mouseWheelEventArgs = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
mouseWheelEventArgs.RoutedEvent = ScrollViewer.MouseWheelEvent;
mouseWheelEventArgs.Source = sender;
this.parentScrollViewer.RaiseEvent(mouseWheelEventArgs);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.