放大Canvas的所有内容

时间:2015-05-14 11:22:33

标签: c# canvas windows-store-apps windows-8.1 scrollviewer

我有这个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及其图像留在这个地方,相同的比例,完好无损!

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的错误是您为每个图像的宽度(Width="570")指定了一个常量值,这样它就不会放大或缩小,除非您以编程方式更改它的宽度。

更改图像宽度的最佳方法是为其绑定变量值,您可以创建一个转换器,将画布的宽度除以2(canvas.width / 2)并绑定每个图像的宽度到这个转换器.. 然后你的变焦将完美地工作。