[英]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.