UWP:如果缩放系数大于 1,SCrollViewer.ChangeView 不滚动

UWP: SCrollViewer.ChangeView doesn't scroll if zoom factor is greater than 1

我在 Windows 10 的 UWP 应用程序中添加了一个 ScrollViewer。

我想将它用于缩放和平移。

这是我的 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;
}

它在 scrollViewer.ZoomFactor > 1.

时运行良好(即它实际上水平平移,并且 res = true

scrollViewer.ZoomFactor < 1 时,它什么也不做(和 res = false)。

编辑: 我还注意到,当 scrollViewer.ZoomFactor < 1 时,属性 ScrollableWidthScrollableHeight 变为 0,而当 scrollViewer.ZoomFactor > 1 时,属性 ScrollableWidthScrollableHeight 为阳性。

当缩放系数小于 1 时,如何使 ChangeView 的 ScrollViewer return 为真?

我认为你必须将 ScrollViewer.ZoomMode 设置为 Enabled

此致

为了以后遇到这个话题的人,我是这样解决的:

我必须将 ScrollArea 的 Width/Height 设置为小于 Workspace 元素的 Width/Height。

我的问题是将 ScrollArea 的 Width/Height 设置为 10000。如果我改为设置为 Auto(或不表示),而是将 Width/Height 设置为Workspace到10000,就达到了我想要的效果