C#/WPF - 获取ScrollViewer的滚动位置?

24

好的,那么,每个人都知道如何设置ScrollViewer的滚动位置。有关ScrollViewer.ScrollToVerticalOffset()已经写了整篇文章和博客文章,在这里也有好几百个问题和答案。

所以,我输入:

myScrollViewer.ScrollToVerticalOffset(280);

...并且它非常友好地滚动到该位置。

问题是,现在哪个属性包含280,以便我稍后检索它?

(提示:myScrollViewer.VerticalOffsetContentVerticalOffset都为0;myScrollViewer.ScrollInfo根本不存在。)

编辑:显然我需要更详细的演示。

private void btnTest_Click(object sender, RoutedEventArgs e) {
  double scrollTarget = 280;
  MessageBox.Show("Target: " + scrollTarget.ToString());
  myScrollViewer.ScrollToVerticalOffset(scrollTarget);
  MessageBox.Show("Now: " + myScrollViewer.VerticalOffset);
}

我必须重申,这个确实可以滚动。它准确地滚到我想要的位置。但是myScrollViewer.VerticalOffset被设置为0。


阅读 MSDN,VerticalOffsetContentVerticalOffset 应该为您提供正确的值...在什么时候访问这些属性(当它们评估为0时)? - Alastair Pitts
3个回答

27

解决方案是在调用myScrollViewer.ScrollToVerticalOffset()之后手动调用myScrollViewer.UpdateLayout()。然后,myScrollViewer.VerticalOffset将具有预期的值。


4

请确保在LayoutUpdated事件触发后,您的VerticalScrollBarVisibility属性设置为"Visible"并且VerticalScrollOffset属性设置为280。


0

我认为你在窗口的构造函数中调用了 myscrollViewer。

你可以在单击按钮或窗口的 loaded 方法中调用它们,这样垂直偏移值就会更新。也就是说,在初始化窗口后,这些值会得到更新!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接