6

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

2 回答 2

1

只是遇到了同样的问题-这里的基本问题是我的代码确实ChangeView()在同一个周期中调用了两次-一次在非 GUI 线程上(返回true,但当然并没有真正滚动到所需的位置,因为它不在GUI 线程),然后在 GUI 线程上的调度程序方法中(返回false,因为 scrollViewer 显然看到它已经获得了一个尚未显示的新滚动位置)。

一旦我删除了ChangeView()未在 GUI 线程上完成的调用,它就可以正常工作。如果文档ScrollViewer能解释在哪些情况下会返回,那将有所帮助false,但......

于 2015-03-12T12:21:43.560 回答
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);
于 2014-01-30T15:25:03.713 回答