8

キャンバス (rootCanvas) を含むウィンドウで構成される単純なアプリケーションがあります。これに別のキャンバス (テスト) を追加し、子キャンバスの LayoutTransform に別の変換を適用しようとしています。これはすべて、XAML を使用するのではなく、プログラムで行われています。

一部の変換は機能していますが、他の変換は次のとおりではありません。

  • LayoutTranform が RotateTransform に設定されている場合、期待どおりに機能します。
  • TranslateTransform に設定されている場合、翻訳は適用されていないように見え、テスト キャンバスはまだ rootCanvas の上隅にあります。
  • 回転と平行移動を適用して構築された MatrixTransform に設定すると、回転のみが適用されたように見えます。

コードを以下に示します。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Canvas rootCanvas = (Canvas)Application.Current.Windows[0].FindName("canvas1");

        Canvas test = new Canvas();
        test.Width = 10;
        test.Height = 10;
        test.Background = Brushes.Aqua;

        // this works 
        //test.LayoutTransform = new RotateTransform(45);

        // this doesn't
        //test.LayoutTransform = new TranslateTransform(40, 40);

        // only the rotate part of this works
        Matrix matrix = new Matrix();
        matrix.Rotate(45);
        matrix.Translate(40, 40);
        test.LayoutTransform = new MatrixTransform(matrix);

        rootCanvas.Children.Add(test);
    }
}

翻訳が期待どおりに機能していないように見える理由が理解できないので、誰かがここで私が間違っていることを説明してくれれば非常に感謝しています.

前もって感謝します、

ウィブス

4

1 に答える 1

15

FrameworkElement.LayoutTransform プロパティの備考をお読みください。

ただし、LayoutTransform は TranslateTransform 操作を無視します。

を適用するには、UIElement.RenderTransform プロパティを使用しTranslateTransformます。

于 2012-08-21T12:16:45.700 に答える