C# 画布属性和边距之间的差异
将C# 画布属性和边距之间的差异,c#,.net,wpf,C#,.net,Wpf,将SetValue与(例如)Canvas.LeftProperty和Margin属性一起使用有什么区别吗 更清楚地说: <Canvas> <Rectangle x:Name="rect"> </Canvas> 相当于 rect.Margin = new Thickness(10, 0, 0, 0) 是否?看起来是一样的,但在第一种情况下,画布会将您移动到rect右侧的10点。在第二个rect中,向右移
SetValue
与(例如)Canvas.LeftProperty
和Margin
属性一起使用有什么区别吗
更清楚地说:
<Canvas>
<Rectangle x:Name="rect">
</Canvas>
相当于
rect.Margin = new Thickness(10, 0, 0, 0)
是否?看起来是一样的,但在第一种情况下,画布会将您移动到
rect
右侧的10
点。在第二个rect
中,向右移动10
点
根据您的目的使用其中一种方法
编辑:如果深入查看WPF代码。在第一种情况下,
rect
移动到画布中,在第二种情况下移动到矩形中。边距属性用于每个元素,以确定对象周围的额外空间。它适用于几乎所有类型的布局(StackPanel、Grid、ContentControls等)
Canvas.LeftProperty(以及Top、Right和Bottom)仅适用于画布内部的元素。画布将使用这些值来确定对象的位置。对于路径等形状元素,画布在确定位置时也会查看形状的位置数据
从技术上讲,画布附加属性应与形状(如果有)的固有位置数据以及边距一起累积。您可以使用所有3个来修改位置。但通常你会尽量保持简单
例如,矩形应使用其宽度和高度属性以及Canvas.Left和Canvas.Top。路径要么仅依赖于其点数据,要么使用Canvas.Left和Canvas.Top对其进行偏移。您不应该对画布中的元素使用边距,因为不使用边距可以更好地进行控制,但从技术上讲可以
Canvas.Left
Canvas.Right
Canvas.Top
Canvas.Bottom
仅在画布容器内强制,它们不会改变所附加控件的宽度和高度。(左=10,右=10将不会拉伸以使每侧的边距为10)
由设置它的对象控制,例如,它将在网格上的画布之外工作,并将更改任何控件的宽度和高度以强制执行其值(如果宽度和高度为NaN).您可以使用TemplateBinding或常规绑定在对象的模板内使用该属性,因为它是DependencyProperty。这也会调整对象的宽度和高度
画布属性是附加到FrameworkElement的属性,允许定位可能没有边距属性的元素。如果对象没有画布父对象,则它们不起作用。对于直接位于
画布中的元素,唯一的区别在于平均值。最终结果完全相同
定位矩形
时,布局引擎会将影响其位置的所有值相加。对于X
坐标,这包括Canvas.Left
和Margin.Left
因此,在一种情况下,它添加了10+0
,而在另一种情况下,它添加了0+10
那就随你的便吧。就我个人而言,我更喜欢画布。在这种情况下,左
,因为它似乎更有上下文意义。好的,但有什么区别(如果有)?
Canvas.Left
Canvas.Right
Canvas.Top
Canvas.Bottom
Margin.Left
Margin.Right
Margin.Top
Margin.Bottom