UWP: SCrollViewer.ChangeView не прокручивается, если коэффициент масштабирования больше 1 - PullRequest
0 голосов
/ 04 января 2019

Я добавил ScrollViewer в свое приложение UWP для Windows 10.

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

Вот мой XAML:

<Page
    x:Class="LiquidTextUWP.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:lt="using:LiquidTextUWP.Controls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
  <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden" 
                ZoomMode="Enabled" Background="DarkSeaGreen" Name="ScrollArea" 
                Width="10000" Height="10000">
    <Grid Background="LightGray" Name="Workspace">
      <!-- here I put all my other controls -->
    </Grid>
  </ScrollViewer>
</Page>

Для панорамирования я добавил небольшой обработчик событий для события PointerMoved, например:

private double previousX = 0;

public void OnPointerMoved(object sender, PointerRoutedEventArgs e)
{
    if (!(sender is ScrollViewer scrollViewer))
        return; 
    PointerPoint pp = e.GetCurrentPoint(null);
    double deltaX = pp.Position.X - previousX;
    previousDeltaX = pp.Position.X
    bool res = scrollViewer.ChangeView(scrollViewer.HorizontalOffset - deltaX, null, null);
    e.Handled = true;
}

Это работает хорошо (то есть фактически панорамируется горизонтально, и res = true), когда scrollViewer.ZoomFactor > 1.

Когда вместо scrollViewer.ZoomFactor < 1 он ничего не делает (и res = false).

EDIT: Я также заметил, что когда scrollViewer.ZoomFactor < 1, свойства ScrollableWidth и ScrollableHeight переходят в 0, тогда как при scrollViewer.ZoomFactor > 1 свойства ScrollableWidth и ScrollableHeight являются положительными.

Как я могу включить ScrollViewer для возврата true для ChangeView, даже если коэффициент масштабирования меньше 1?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Ради людей, которые столкнутся с этой темой в будущем, вот как я ее решил:

Я должен был установить ширину / высоту ScrollArea намного меньше, чем ширина / высота элемента Workspace.

Моя проблема заключалась в том, чтобы установить ширину / высоту ScrollArea на 10000. Если я вместо этого установлю на Авто (или оставлю это невыраженным), а вместо этого я установлю ширину / высоту Workspace на 10000, то я иметь желаемый эффект.

0 голосов
/ 05 января 2019

Вы должны установить ScrollViewer.ZoomMode на Enabled, я думаю.

С уважением

...