【问题标题】:UWP lock scrollviewer in a positionUWP 将滚动查看器锁定在某个位置
【发布时间】:2019-05-15 13:17:21
【问题描述】:

我有一个滚动查看器想在一个动作中将它锁定在特定的滚动位置,并且必须在另一个动作中释放它。

  1. 我尝试启用和禁用 VerticalScrollMode 它会改变 滚动位置。

MyScrollViewer.VerticalScrollMode = ScrollMode.Disabled;

  1. 我也尝试过更改VerticalScrollBarVisibility,它会将verticaloffset 置于顶部

MyScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;

想知道有没有办法将滚动查看器锁定在特定的偏移量?

【问题讨论】:

    标签: uwp windows-10-universal uwp-xaml


    【解决方案1】:

    我已经编写了一些代码来测试它,它似乎可以工作。也许它会让你知道如何解决你的问题。您可以简单地锁定滚动查看器,然后将其偏移到您要显示的项目,或者只是禁用“稍后”滚动,因为对我来说,它似乎并没有改变视图。如果您动态添加项目,那么 VisualTreeView 可能会进一步帮助您。

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" MinWidth="200" />
        </Grid.ColumnDefinitions>
        <ScrollViewer x:Name="SomeScrollViewer">
            <StackPanel x:Name="LotsOfItems" HorizontalAlignment="Center" />
        </ScrollViewer>
        <StackPanel Grid.Column="1">
            <Button
                x:Name="OffsetButton"
                Click="OffsetButton_Click"
                Content="Offset" />
            <Button
                x:Name="LockButton"
                Click="LockButton_Click"
                Content="Lock/Unlock" />
        </StackPanel>
    </Grid>
    

    后面的代码

        public MainPage()
        {
            this.InitializeComponent();
            for (int i = 0; i < 50; i++)
            {
                LotsOfItems.Children.Add(new TextBlock() { Text = "Some item in a scrollviewer: " + i.ToString() });
            }
    
        }
    
        private void OffsetButton_Click(object sender, RoutedEventArgs e)
        {
            SomeScrollViewer.ChangeView(0, 250, 1f);
        }
    
        private void LockButton_Click(object sender, RoutedEventArgs e)
        {
            if (SomeScrollViewer.VerticalScrollMode == ScrollMode.Disabled)
            {
                SomeScrollViewer.VerticalScrollMode = ScrollMode.Enabled;
                SomeScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
    
            }
            else
            {
                SomeScrollViewer.VerticalScrollMode = ScrollMode.Disabled;
                SomeScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;
            }
    
        }
    

    【讨论】:

      【解决方案2】:

      这是一种非常简单的方法,但也许你可以在它的基础上实现你想要的。

      public double offset = 0.0;
      

      在禁用滚动条之前保存偏移量:

      offset = ScrView.HorizontalOffset;
      ScrView.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
      

      禁用后,将偏移值添加回滚动条

      ScrView.ChangeView(offset, null, null, false);
      

      【讨论】:

        猜你喜欢
        • 2011-08-10
        • 2019-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        • 1970-01-01
        • 2011-08-19
        相关资源
        最近更新 更多