C# 为什么我不能更改边距?

C# 为什么我不能更改边距?,c#,wpf,margin,C#,Wpf,Margin,顶部写着“获取或设置”,那么为什么不让我更改它呢?似乎所有参数对于WPF Margin属性都是必需的,尽管您可能希望一次只更改一个或两个属性值 在Google search中,我看到Java和ASP.net都使用margin属性设置了所有4个值 但是,此示例允许用户检索Label.Margin.Left值,尽管。。。 您不能这样做,因为尽管Margin.Left获取或设置了Margin.Left,但它并不像变量那样使用。就像填充一样 您可能会注意到,边距(对于填充)是一个属性,厚度是它的值。所以


顶部写着“获取或设置”,那么为什么不让我更改它呢?

似乎所有参数对于WPF Margin属性都是必需的,尽管您可能希望一次只更改一个或两个属性值

在Google search中,我看到Java和ASP.net都使用margin属性设置了所有4个值

但是,此示例允许用户检索Label.Margin.Left值,尽管。。。
您不能这样做,因为尽管
Margin.Left
获取或设置了Margin.Left,但它并不像变量那样使用。就像填充一样

您可能会注意到,
边距
(对于
填充
)是一个属性,
厚度
是它的值。所以,当你说

label1.Margin.Left = MainGrid.ActualHeight / 2 - label1.ActualHeight / 2;
您仅编辑副本(
Margin
),因为
Margin
返回结构(
Thickness
)。这就是您收到错误的原因。更改不会保存,因为它是副本

基本上,虽然您可以将
Object.Margin.Left
的值更改为特定值,但它不会保存/更改对象
Margin
属性,这就是为什么会出现错误


例如 我们不能说

label1.Margin.Left = MainGrid.ActualHeight / 2 - label1.ActualHeight /2;
但我们可以说

Thickness NewThickness = new Thickness(); //Initialize a new Thicnkess
NewThickness.Left = MainGrid.ActualHeight / 2 - label1.ActualHeight /2; //Set the left property of NewThickness
label1.Margin = NewThickness; //Apply the changes to label1
这意味着,由于
边距
是一个属性,因此不允许直接更改其
厚度


或者,您可以使用以下方法,我认为这更容易设置对象的
边距

label1.Margin = new Thickness(double left, double top, double right, double bottom);
谢谢,

我希望这对您有所帮助:)

这里的要点是,在临时
结构
值中指定属性没有意义,因为它没有持久的效果

是一个
struct
,和
label1。Margin
label1
的边距的
Thickness
值的副本。它是一个副本,因为
struct
s是按值传递的。分配给
label1.Margin.Left
没有意义,因为您将只更改
label1.Margin
副本中
Left
的值

您可以改为执行以下操作:

厚度t=label1.余量;
t、 左=……;//在此处指定您的值
标签1.边缘=t;
另见


工具提示说“获取或设置…”,因为您可以获取或设置
label1
Margin
属性,但在您的特定情况下,没有必要指定
label1.Margin
Left
属性。