【问题标题】:ScrollViewer's ScrollToVerticalOffset value is not updated in ScrollViewer.VerticalOffset propertyScrollViewer 的 ScrollToVerticalOffset 值未在 ScrollViewer.VerticalOffset 属性中更新
【发布时间】:2016-04-29 18:07:38
【问题描述】:

我参考了下面的论坛

https://social.msdn.microsoft.com/Forums/en-US/1885dcfa-af48-47ee-85d7-bb9809e24f38/scrollviewerscrolltoverticaloffset-not-working-in-windows-8?forum=winappswithcsharp

通过调用ScrollViewer.UpdateLayout()方法,我们可以设置scrollviewer的垂直位置。我可以看到 UI 中的垂直偏移值在调用/不调用 ScrollViewer.UpdateLayout() 的情况下发生了变化。但是当我尝试从 ScrollViewer.VerticalOffset 获取值时,它不会被改变。

ScrollViewer.ScrollToVerticalOffset(1905);

// ScrollViewer.UpdateLayout();

还有其他方法可以更新此 ScrollViewer.VerticalOffset?

【问题讨论】:

    标签: windows-store-apps win-universal-app scrollviewer


    【解决方案1】:

    ScrollViewer 设置垂直/水平偏移的推荐方法是使用ChangeView() 方法。以下是使用方法

    scrollViewer.ChangeView(scrollViewer.HorizontalOffset, 500, scrollViewer.ZoomFactor);
    

    您可以在ViewChanged 事件中获取更改后的VerticalOffsetHorizontalOffset 属性。例如

    private void scrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
    {
        double verticalOffset = scrollViewer.VerticalOffset;
    }
    

    【讨论】:

    • @Hassan 谢谢。
    • @Hassan 再查询一次。我通过设置上述代码检查了 VerticalOffset 值,并通过在该事件中放置断点来确定使用 ViewChanged 事件的 ScrollViewer 的实际 VerticalOffset 值。然后滚动条在 UI 的滚动查看器中移动。但是当我在没有断点的情况下进行检查时,UI 中的垂直滚动条值不会更改。所以已经使用 Task.Delay 进行了检查。这对我也没有帮助。
    • 您要更改应用程序的哪一部分VerticalOffset?确保在调用 ChangeView() 方法时加载 UI。
    • @Hassan 我在加载 ui 后更改按钮单击中的 VerticalOffset。在这里,我加载了包含 50 个 TextBlock 和 50 行的自定义面板。
    • 我已经彻底检查过,但无法产生您所描述的情况。尝试使用RunIdleAsync(),例如await Window.Current.Dispatcher.RunIdleAsync((args) => { scrollViewer.ChangeView(scrollViewer.HorizontalOffset, 500, scrollViewer.ZoomFactor); });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    相关资源
    最近更新 更多