Я добавил 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?