2

私は次のような単純なキャンバスを持っています:

<Canvas x:Name="canvBackground" Grid.Row="0" Margin="20" Background="Blue">
        <Canvas.LayoutTransform>
            <ScaleTransform x:Name="scaleTransformBackground"
                            ScaleX="{Binding Value,
                                             ElementName=uiSliderZoom}"
                            ScaleY="{Binding Value,
                                             ElementName=uiSliderZoom}" />
        </Canvas.LayoutTransform>
        <Canvas.RenderTransform>
            <RotateTransform x:Name="rotateTransformBackground"
                            Angle="{Binding Value,
                                             ElementName=uiSliderRotate}"></RotateTransform>
        </Canvas.RenderTransform  >
    </Canvas>

これらの変換は、2つのスライダーコントロールにバインドされています。キャンバスの背景にイメージブラシを割り当てましたが、これは正常に機能します。imagebrushを割り当てるときに、両方の変換のcenterXプロパティとcenterYプロパティを画像のXとYの半分に設定しています。ズームスライダーは、回転スライダーと同様に期待どおりに機能します。

ズームとスライダーを組み合わせると、奇妙な結果が得られます(つまり、回転変換は元のサイズの画像のcenterXプロパティとcenterYプロパティに基づいています。したがって、回転とズームは期待どおりに動作しません(ズームインしてズームアウトして回転します)。画像の中央付近。

誰かが助けることができますか?

どうもありがとう。

4

1 に答える 1

7

両方の変換をTransformGroupに入れて、それをLayoutTransformまたはRenderTransformのいずれかに割り当てることができます。

<Canvas x:Name="canvBackground" Grid.Row="0" Margin="20" Background="Blue">
    <Canvas.RenderTransform>
        <TransformGroup>
            <ScaleTransform x:Name="scaleTransformBackground"
                            ScaleX="{Binding Value, ElementName=uiSliderZoom}"
                            ScaleY="{Binding Value, ElementName=uiSliderZoom}" />
            <RotateTransform x:Name="rotateTransformBackground"
                             Angle="{Binding Value, ElementName=uiSliderRotate}" />
        </TransformGroup>
    </Canvas.RenderTransform  >
</Canvas>

また、 RenderTransformOriginを設定する必要がある場合もあります。

于 2013-01-08T13:57:09.077 に答える