将其LayoutTransform设置为TranslateTransform或MatrixTransform时,Canv



我有一个简单的应用程序,它由一个包含Canvas(rootCanvas)的Window组成。我正在尝试添加另一个Canvas(测试),并将不同的Transforms应用于子画布的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);
    }
}

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

提前感谢

Wibbs

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

但是,LayoutTransform会忽略TranslateTransform操作。

使用UIElement.RenderTransform属性应用TranslateTransform

最新更新