Canvas和Grid之间的区别是移动,调整大小,旋转UIElements

时间:2014-01-20 10:05:09

标签: c# wpf canvas resize

我想开发一个可以动态添加控件的编辑器,然后移动,调整大小或旋转以使用此UIElements构建一个窗口。

我的问题是谁更适合这个UIElements,Grid或Canvas的容器?

Canvas正处于绝对位置,可能具有更好的转换精度。但是当我以不同的屏幕分辨率显示应用程序时响应性会降低?我不太了解Grid或Canvas的优点/缺点。

我用Canvas和Grid做了一个例子,用这段代码移动UIElement:

private void ui_MouseMove(object sender, MouseEventArgs e)
    {
        if (m_IsPressed)
        {
            UIElement ui = (UIElement)sender;
            TranslateTransform transform = new TranslateTransform();
            transform.X = Mouse.GetPosition(MyGridOrCanvas).X;
            transform.Y = Mouse.GetPosition(MyGridOrCanvas).Y;
            ui.RenderTransform = transform;
        }
    }

但是使用Canvas或Grid,当我单击UIElement而不移动时,UIElement总是从我的光标移动x,y。也许这不是最好的方法。 如果您还有关于如何构建此功能的教程也会对我有帮助。我对这些东西很新。

非常感谢和问候!

1 个答案:

答案 0 :(得分:0)

我将以it is likely to be closed by the community here for being too subjective为这个问题提供一个简短的答案。我已经可以看到一次近距离投票。

所以,在我看来,Canvas是一个更好的控制用于此目的。出于一个原因,它没有Grid的相当大的布局要求,因此效率更高。另一个主要原因是使用Canvas.TopCanvas.Left属性来移动项目是完美的......要在其他Panel中移动项目,您通常需要设置相反,Margin属性,这远非理想。

至于你点击时移动的物品...这只是你的代码中的一个错误,它是正常的行为 - 除非我们告诉你,否则控件不会自行移动它来。