将LayoutTransform设置为TranslateTransform或MatrixTransform时,Canvas子的翻译无法正常工作

Wib*_*bbs 5 wpf layouttransform

我有一个简单的应用程序,包含一个包含Canvas(rootCanvas)的窗口.我试图添加另一个Canvas(测试)并将不同的变换应用于子画布的LayoutTransform.这都是以编程方式完成的,而不是使用XAML.

有些转型正在发挥作用,而其他转型则不如下:

  • 当LayoutTranform设置为RotateTransform时,它按预期工作.
  • 当它设置为TranslateTransform时,似乎没有应用转换,并且测试Canvas仍然位于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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有人能解释我在这里做错了什么,我将非常感激,因为我不明白为什么翻译似乎没有像我期望的那样起作用.

提前致谢,

Wibbs

LPL*_*LPL 10

请阅读FrameworkElement.LayoutTransform属性中的备注.

但是,LayoutTransform忽略TranslateTransform操作.

使用UIElement.RenderTransform属性来应用TranslateTransform.