我有一个ScrollViewer,它包含了这个窗口中的所有内容,还有一些ItemControls,它们可以根据它们包含的项目数量动态地增长和收缩。我将它们 Package 在ScrollViewers中,并将其高度限制为400,以便ScrollViewers在高度超过400像素时可以滚动。ScrollViewers还包含一些其他的东西,如文本框和按钮,用于创建一个新的项目添加到ItemsControl中,我只想在用户滚动到底部时将其带入视图。
<ScrollViewer>
<StackPanel Margin="20">
<ScrollViewer MaxHeight="400" VerticalScrollBarVisibility="Auto">
<ItemsControl>
...
</ItemsControl>
<StackPanel Orientation="Horizontal">
...
</StackPanel>
</ScrollViewer>
<ScrollViewer MaxHeight="400" VerticalScrollBarVisibility="Auto">
<ItemsControl>
...
</ItemsControl>
<StackPanel Orientation="Horizontal">
...
</StackPanel>
</ScrollViewer>
</StackPanel>
</ScrollViewer>
现在说说我的问题:当ItemControls小于400像素时,滚动条会自动隐藏,但它仍然会吃掉鼠标滚轮事件。我想要的是,它只是滚动外ScrollViewer代替。
我知道我可以改变ScrollViewer的属性,当它像这样自动隐藏时,但似乎没有一个属性可以阻止它尝试滚动,即使没有什么可滚动的。
<Style TargetType="{x:Type ScrollViewer}">
<Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
<Style.Triggers>
<Trigger Property="ComputedVerticalScrollBarVisibility" Value="Collapsed">
What do I put here?
</Trigger>
</Style.Triggers>
</Style>
似乎唯一工作的是IsEnabled="False"
,但也禁用了ScrollViewer中我不想要的所有内容,而IsHittestVisible="False"
也有同样的问题,即不允许我与ItemsControl中我需要的任何内容进行交互。
我也尝试过一些东西与PreviewMouseEvent
,但没有我尝试似乎工作。
1条答案
按热度按时间nhhxz33t1#
我找不到任何干净的解决方案,只有XAML,但你可以在后面的代码中重新路由事件。
在自动上设置子级的VerticalScrollBarVisibility
然后将相同的事件添加到两个“子项”。(您可以在XAML或后面的代码中执行此操作)
最后,如果ComputedVerticalScrollBarVisibility为“Collapsed”,则使用Delta值调用主滚动查看器的ScrollToVerticalOffset(将其反转)