【问题标题】:How to programatically scroll a ScrollViewer to the top in uwp xaml?如何以编程方式将 ScrollViewer 滚动到 uwp xaml 的顶部?
【发布时间】:2020-09-10 14:30:38
【问题描述】:

我已将 ScrollViewer 应用于用户控件,如果高度超过该控件,该控件会自动滚动到底部。 现在我的页面正在关闭,滚动条位于底部位置,当我重新打开页面时它仍位于底部。

如何在每次打开该页面时将滚动条重置到顶部。

<ScrollViewer x:Name="myScrollViewer">
              
    <Grid Margin="0,0,0,40">
       </Grid>
</ScrollViewer>

【问题讨论】:

    标签: xaml uwp


    【解决方案1】:

    ScrollViewer提供了ChangeView方法,可以用来调整滚动状态:

    // scroll to top
    myScrollViewer.ChangeView(0, 0, 1);
    

    页面加载完成后可以调用该方法将ScrollViewer滚动到顶部。


    更新

    如果要访问ViewModel中页面上的控件,有两种方式:

    1.公共控制

    这个方法意味着你需要创建一个公共页面实例,然后在XAML中暴露控件,如下所示:

    ScrollViewerPage.xaml

    <ScrollViewer x:Name="myScrollViewer" x:FieldModifier="public">
        <!-- your code -->
    </ScrollViewer>
    

    ScrollViewerPage.xaml.cs

    public sealed partial class ScrollViewerPage : Page
    {
        public static ScrollViewerPage Current;
        public ScrollViewerPage()
        {
            this.InitializeComponent();
            Current = this;
        }
    }
    

    页面加载后,您可以使用此代码访问ScrollViewer

    ScrollViewerPage.Current.myScrollViewer.ChangeView(0, 0, 1);
    

    2。在 ViewModel 中定义控制变量/属性

    你可以在ViewModel中定义一个ScrollViewer类型的变量或属性(public),然后在页面加载的时候给属性赋值,然后就可以通过访问属性来访问ScrollViewerViewModel.

    MyViewModel.cs

    public class MyViewModel
    {
        public ScrollViewer MyScrollViewer { get; set; }
    
        // Other code
    }
    

    ScrollViewerPage.xaml.cs

    public ScrollViewerPage()
    {
        this.InitializeComponent();
        var vm = new MyViewModel();
        vm.MyScrollViewer = myScrollViewer;
    }
    

    【讨论】:

    • 感谢您的回答。如何在 ViewModel 中访问 myScrollViewer?
    • 您好,我更新了答案,请查收。
    猜你喜欢
    • 2013-09-16
    • 2015-09-09
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    相关资源
    最近更新 更多