WPF - 跳跃/抖动滑块控制导致“BringIntoView”出现问题

时间:2015-04-03 15:23:39

标签: c# wpf xaml scroll frameworkelement

我有一个框架元素,我需要始终保持在视图中。要做到这一点,我会在它超出界限时使用BringIntoView()。但是,我注意到BringIntoView()并不能很好地处理速度问题。当以快速方式操纵UI时(在我的情况下,它是包含选择器的时间轴),BringIntoView()似乎无法跟上。当时间轴中的选择器快速移动到容器的边界之外时,BringIntoView()将(看似)试图通过将选择器移动到距边界很远的位置来预测这种快速性。

而不是在选择器缓慢移动时发生的平滑滚动效果,而是我们得到的是一个抖动的滚动,选择器在容器的边缘和中间之间不断地来回移动。它几乎就像它无法处理速度一样,只是尽可能地远离容器边界而将框架元件夹住,从而放弃尝试进行精确的移动。

我不知道BringIntoView()是如何工作的,但是我喜欢类似的东西,可以预测与框架元素的定位相比需要滚动的距离。还有其他类似于" BringIntoView()"?

的内容

1 个答案:

答案 0 :(得分:0)

经过大量的搜索,我发现了这个帖子:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/2d0d202b-caf7-4d71-a61f-bcaa33565cdd/jumpy-slider-control-behavior?forum=wpf

摆脱滑块中的抖动/跳跃行为的解决方案与" BringIntoView()"无关。在所有情况下,而不是控制背后的双向值绑定的速度。将Delay=1添加到绑定中可以消除控件中的任何抖动行为。它实际上为双向绑定增加了1毫秒的延迟,从而为UI提供了相应的更新时间。

有一个权衡;由于1毫秒的延迟,UI不是那么平滑。但这是一个很小的牺牲,至少对我而言。