我有这个ScrollViewer,我以编程方式添加元素:
<ScrollViewer VerticalSnapPointsAlignment="Near"
VerticalSnapPointsType="Mandatory"
VerticalScrollMode="Enabled"
VerticalScrollBarVisibility="Hidden"
ZoomMode="Disabled"
Width="400"
Height="400"
x:Name="MainFeatureScrollViewer"
ViewChanging="ScrollViewer_ViewChanging">
<StackPanel x:Name="MainFeatureStackPanel" />
</ScrollViewer>
当我像下面一样调用ChangeView时,它返回false并且没有任何反应。为什么这不起作用?
bool result = this.MainFeatureScrollViewer.ChangeView(null, 400, null, true);
答案 0 :(得分:1)
刚出现同样的问题 - 这里的基本问题是我的代码在同一个循环中调用了ChangeView()
两次 - 一次是在非GUI线程上(返回true
,但当然是没有真正滚动到所需的位置,因为它不在GUI线程上),后来在GUI线程上的调度程序方法(返回false
,因为scrollViewer显然已经看到它已经获得了新的滚动位置它还没有显示出来。)
一旦我删除了未在GUI线程上完成的ChangeView()
调用,它就可以正常工作。如果ScrollViewer
的文档可以解释它将在哪些情况下返回false
,那将会有所帮助,但是......
答案 1 :(得分:0)
我认为这可能是您的某些属性设置的一个因素。尝试将ScrollViewer剥离到最小值并更改偏移量。当你的高度为400时,你告诉它滚动到400所以它可能是它无法滚动到你想要的地方的一个因素(尝试将其设置为(null,200,null,null)以查看是否有效。
<ScrollViewer VerticalSnapPointsAlignment="Near"
VerticalScrollBarVisibility="Hidden"
ZoomMode="Disabled"
Width="400"
Height="400"
x:Name="MainFeatureScrollViewer"
ViewChanging="ScrollViewer_ViewChanging">
<StackPanel x:Name="MainFeatureStackPanel" />
</ScrollViewer>
bool result = this.MainFeatureScrollViewer.ChangeView(null, 200, null, true);