Canvas和Grid之间的区别是移动,resize,旋转UIElements

我想开发一个可以动态添加控件的编辑器,然后移动,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。 也许这不是最好的方法。 如果您还有关于如何构建此function的教程也会帮助我。 我对这些东西很新。

非常感谢和问候!

我只是为这个问题提供一个简短的答案,因为这里的社区很可能因为过于主观而被关闭 。 我已经可以看到一次近距离投票。

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

至于你的项目在被点击时移动……这只是你的代码中的一个错误,这不是正常的行为 – 除非我们告诉它,否则控件不会自行移动。