UWP блокировка прокрутки в позиции - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть прокручиватель, который хотел бы заблокировать его в определенной позиции прокрутки в одном действии и отпустить его в другом действии.

  1. Я попытался включить и отключить VerticalScrollMode, он изменяет положение прокрутки.

MyScrollViewer.VerticalScrollMode = ScrollMode.Disabled;

Я также пытался изменить VerticalScrollBarVisibility, он переносит вертикальное смещение наверх

MyScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;

Хотелось бы знатьЕсть ли способ блокировки прокрутки на определенное смещение?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Это действительно минимальный и простой способ сделать это, но, возможно, вы можете использовать его для достижения желаемого.

public double offset = 0.0;

Сохранить смещение перед отключением полосы прокрутки:

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

После отключения добавьте значение смещения обратно на полосу прокрутки

ScrView.ChangeView(offset, null, null, false);
0 голосов
/ 14 декабря 2018

Я написал некоторый код для тестирования, и похоже, что он работает.Может быть, это даст вам представление о том, как решить вашу проблему.Вы можете просто заблокировать просмотрщик прокрутки и затем сместить его на элемент, который вы хотите отобразить, или просто отключить прокрутку «позже», потому что для меня это, похоже, не меняет вид.Если вы добавляете элементы динамически, 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;
        }

    }
...