将LayoutTransform设置为RotateTransform以获取Canvas上的元素会产生意外结果

时间:2016-04-21 14:50:18

标签: c# wpf

来自MainWindow ctor:

for(var i = 0; i <5; i++)
        {
            var button = new Button {};
            button.LayoutTransform = new RotateTransform(i * 10);
            button.Width = 300;
            button.Height = 300;
            TempCanvas.Children.Add(button);

        }

这会产生以下结果:

enter image description here

请有人解释为什么会这样。我希望5个按钮可以旋转到同一个点。

我不想渲染RenderTransform,因为我将渲染的图形将在父级之外绘制而不会反映在度量中。

2 个答案:

答案 0 :(得分:1)

Canvas是一个问题,与其他包含不同,它不受物理尺寸的限制,它会向各个方向延伸到无限远。因此它的旋转原点不是canvas.height / 2的canvas.width / 2.

如果您在网格或停靠面板中重复代码,您将获得所需的结果。

答案 1 :(得分:0)

你想要这样的东西:

Render trnas

<强> 代码:

for (var i = 0; i < 5; i++)
        {
            var button = new Button { };
            //button.LayoutTransform = new RotateTransform(i * 10);
            button.RenderTransform = new RotateTransform(i * 10);
            button.Width = 300;
            button.Height = 300;
            button.Margin = new Thickness(200, 0, 0, 0);
            TempCanvas.Children.Add(button);

        }