首页 > 解决方案 > UWP:如果缩放因子大于 1,SCrollViewer.ChangeView 不会滚动

问题描述

我在适用于 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;
}

res = truescrollViewer.ZoomFactor > 1. _

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

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

当缩放因子小于 1 时,如何使 ScrollViewer 也为 ChangeView 返回 true?

标签: uwpscrollviewerzoomingpanning

解决方案


我认为,您必须将其设置为ScrollViewer.ZoomModeEnabled

最好的祝福


推荐阅读