3

ラベル作成プログラムを書いています。このプログラムでは、中央に白い長方形が配置されたキャンバスがあり、その上にユーザーがサイズ変更、ドラッグなどを行うことができる複数のオブジェクトがあります。ユーザーがキャンバスをズームするオプションもあります。これは、 を使用して実現しScaleTransformます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 に答える