Отключение точек привязки / возврата в ScrollViewer в XAML

У меня есть сетка с изображением внутри ScrollViewer. Пользователь должен иметь возможность увеличивать и уменьшать изображение. Проблема в том, что когда я увеличиваю изображение, прокручиватель, кажется, возвращается назад к левой стороне изображения, хотя я хочу, чтобы зритель оставался в увеличенном положении. Код XAML выглядит следующим образом

<ScrollViewer Name="ScrollViewer" HorizontalSnapPointsType="None" VerticalSnapPointsType="None" ZoomSnapPointsType="None">
    <Grid x:Name="RenderedGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Image x:Name="RenderedImage" Stretch="Fill" />
        <canvas:CanvasControl Name="DrawingCanvas" Draw="CanvasControl_Draw" ClearColor="Transparent"/>

    </Grid>
</ScrollViewer>

Я думал, что этого будет достаточно, если для SnapPointType будет установлено значение "Нет", но, похоже, это не сработает.

1 ответ

Решение

Я написал пост в блоге именно об этой проблеме: почему мой масштабируемый ScrollViewer щелкает изображение слева?

Первая часть проблемы - это сам ScrollViewer, он нуждается в HorizontalScrollBarVisibility а также VerticalScrollBarVisibility установите на Авто.

<ScrollViewer ZoomMode="Enabled" 
              MinZoomFactor="1"
              MaxZoomFactor="4"
              HorizontalScrollBarVisibility="Auto"
              VerticalScrollBarVisibility="Auto">

Чтобы это действительно работало, вам нужно ограничить размер изображения до некоторой ширины / высоты, например:

<Image Source="{Binding ImageUri}"
       MaxWidth="{Binding DataContext.PageWidth, ElementName=MyPage}"
       MaxHeight="{Binding DataContext.PageHeight, ElementName=MyPage}"/>

Вы можете найти более подробную информацию в моем блоге и полный исходный код на GitHub.

Другие вопросы по тегам