Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 画布属性和边距之间的差异_C#_.net_Wpf - Fatal编程技术网

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