ScrollViewer.ChangeView返回false

时间:2013-09-24 02:36:05

标签: winrt-xaml scrollviewer windows-8.1

我有这个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);

2 个答案:

答案 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);