我有这个Xaml:
<Grid x:Name="DrawingGrid" Visibility="Collapsed">
<AppBarButton x:Name="ExitDrawingButton" Icon="Cancel" Click="ExitDrawingButton_Click"></AppBarButton>
<ScrollViewer x:Name="DScrollViewer" ManipulationMode="All" MaxZoomFactor="2.0" MinZoomFactor="1.0" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" DoubleTapped="DScrollViewer_DoubleTapped" Width="1140" Height="770">
<Canvas x:Name="inkCanvas" Background="Transparent" Width="1140" Height="770">
<StackPanel x:Name="DStackPanel" Orientation="Horizontal" Margin="0,0,0,0">
<Image x:Name="DImage0" HorizontalAlignment="Left" Source="{Binding nextImage}" Width="570" Canvas.ZIndex="0"/>
<Image x:Name="DImage1" HorizontalAlignment="Left" Source="{Binding nextImage}" Width="570" Canvas.ZIndex="0"/>
</StackPanel>
</Canvas>
</ScrollViewer>
</Grid>
我使用CanvasManager.cs类在Canvas
上绘图,它运行正常。
现在我需要放大Canvas
:放大Canvas
(墨迹)并缩放它包含的内容(StackPanel
+图像)。
在doubleTapping
ScrollViewer
包含Canvas
的{{1}}我有这个方法:
private async void DScrollViewer_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
Point point = e.GetPosition(DScrollViewer);
if (DScrollViewer.ZoomFactor == 1)
{
await Task.Delay(300);
DScrollViewer.ChangeView(point.X, point.Y, 2.0F, false);
}
else
{
await Task.Delay(300);
DScrollViewer.ChangeView(point.X, point.Y, 1.0F, false);
}
}
结果是:只有Canvas
(它的墨迹)变焦,StackPanel
及其图像留在这个地方,相同的比例,完好无损!
我做错了什么?
答案 0 :(得分:0)
您的错误是您为每个图像的宽度(Width="570"
)指定了一个常量值,这样它就不会放大或缩小,除非您以编程方式更改它的宽度。
更改图像宽度的最佳方法是为其绑定变量值,您可以创建一个转换器,将画布的宽度除以2(canvas.width / 2)并绑定每个图像的宽度到这个转换器.. 然后你的变焦将完美地工作。