我有一个控件,其核心如下:
<ListBox ScrollViewer.CanContentScroll="True"
ScrollViewer.IsDeferredScrollingEnabled="True" Name="w_Carousel">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"
CanVerticallyScroll="False"
CanHorizontallyScroll="True"
/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
它包含自身可能有滚动查看器的对象。简化后,它们看起来像这样:
<ScrollViewer Width="160"
HorizontalScrollBarVisibility="Visible"
IsDeferredScrollingEnabled="False">
<Label>THIS IS SOME REALLY LONG TEXT AND EVEN MORE </Label>
</ScrollViewer>
当我抓住内部控件的滚动条时,向外的控件会响应。怎么了?它看起来像WPF中的一个错误,但我很难相信这是通过质量保证。如何在外部滚动条上进行延迟滚动,但内部滚动条没有延迟滚动,并且正确使用此功能?
答案 0 :(得分:1)
刚才进入这个问题。这里有一个潜在的解决方案(最后,通过omdsmr):
http://social.msdn.microsoft.com/Forums/en/wpf/thread/f95f4727-5e84-48da-b153-973128292172
它说:
我发现问题在于来自儿童滚动查看器的命令泄漏了#39;直到主滚动查看器。
您可以通过添加输入绑定来停止命令路由。
将此添加到主scrollviewer的任何UIElement后代,它也是所有子滚动查看器的祖先:
<UIElement.CommandBindings>
<CommandBinding
Command="{x:Static ScrollBar.DeferScrollToVerticalOffsetCommand}"
CanExecute="OnDeferScrollToOffsetExecuted" />
<CommandBinding
Command="{x:Static ScrollBar.DeferScrollToHorizontalOffsetCommand}"
CanExecute="OnDeferScrollToOffsetExecuted" />
</UIElement.CommandBindings>
然后代码中的这个处理程序:
void OnDeferScrollToOffsetExecuted(object sender, CanExecuteRoutedEventArgs e)
{
e.Handled = true;
}
我自己从未尝试过这个。 Haven决定我是否要使用延迟滚动。