3

我正在编写一个标签制作程序。在这个程序中,我有一个画布,中间有一个白色矩形,上面有多个用户可以调整大小、拖动等的对象。我还可以选择让用户缩放画布,这是我使用ScaleTransformvia完成的LayoutTransform。我想要这样,当用户放大时,画布会在中心放大,而不是相对于右上角。

这是一个演示:

目前,画布缩放如下:

在此处输入图像描述

我需要它像这样缩放:

在此处输入图像描述

如何在缩放画布时不重新定位画布中的元素来完成此任务?

注意:我使用的是 LayoutTransform,因为我必须将它嵌入到ScrollViewer. RenderTransform完成此操作,但当画布元素超出可见画布边界时不会让用户滚动。

4

2 回答 2

0
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="600" Width="600">
    <Grid>
        <ScrollViewer>
            <Border>
                <Border.LayoutTransform>
                    <TransformGroup>
                        <ScaleTransform ScaleX="2.0" ScaleY="2.0"/>
                    </TransformGroup>
                </Border.LayoutTransform>
                <Canvas Background="Red" Width="500" Height="500" VerticalAlignment="Center" HorizontalAlignment="Center">
                    <Canvas.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X="0" Y="-100"/>
                        </TransformGroup>
                    </Canvas.RenderTransform>
                    <Rectangle Canvas.Left="200" Canvas.Top="200" Width="100" Height="100" Fill="Yellow"/>
                </Canvas>
            </Border>
        </ScrollViewer>
    </Grid>
</Window>
于 2014-10-17T18:13:40.950 回答
0

您应该能够完成与 RenderTransformOrigin 相同的事情,方法是使用一个结合了围绕缩放的两个平移的变换。例如,使用 TransformGroup,或为 MatrixTransform 组合矩阵。

具体:使用-X和-Y的平移偏移量将中心点(X,Y)平移到(0,0),进行尺度变换,然后将(0,0)平移回原点(X,Y ) 使用 X 和 Y 的平移偏移量。

如果没有特定的代码示例,我很难确定,但我有一种模糊的感觉,它应该可以使用 RenderTransform,可能应用方式与您希望的不同(例如,将新容器添加到层次结构并应用它到那个)。但是假设 RenderTransform 根本行不通,以上应该。

于 2014-10-15T02:45:56.800 回答