Canvas属性和边距之间的差异

Nic*_*ick 5 .net c# wpf

使用SetValue(例如)Canvas.LeftPropertyMargin属性之间有什么区别?

更清楚:

<Canvas>
   <Rectangle x:Name="rect">                         
</Canvas>
Run Code Online (Sandbox Code Playgroud)

rect.SetValue(Canvas.LeftProperty, 10)
Run Code Online (Sandbox Code Playgroud)

相当于

rect.Margin = new Thickness(10, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)

或不?

Tre*_*ott 4

Margin 属性与每个元素一起使用,以确定对象周围的额外空间。它适用于几乎所有类型的布局(StackPanel、Grid、ContentControls 等)

Canvas.LeftProperty(以及 Top、Right 和 Bottom)仅适用于直接位于 Canvas 内部的元素。画布将使用这些值来确定对象应该位于的位置。对于像路径这样的 Shape 元素,Canvas 在确定位置时还会查看 Shape 的位置数据。

从技术上讲,画布附加属性应与形状(如果有)的固有位置数据以及边距一起累积。您可以使用所有 3 个来修改位置。但通常你会尽量保持简单。

例如,矩形应使用其宽度和高度属性以及 Canvas.Left 和 Canvas.Top。路径要么仅依赖于其点数据,要么使用 Canvas.Left 和 Canvas.Top 对其进行偏移。您不应该对 Canvas 内的元素使用边距,因为您可以在不使用它的情况下更好地控制,但从技术上讲您可以。