在顶部它说,“获取或设置 ......”,那么为什么不让我改变它?
答案 0 :(得分:4)
你不能这样做,因为虽然Margin.Left
获取或设置,但它不像变量那样使用。就像Padding
。
您可能会注意到,Margin
(对于Padding
)是属性,Thickness
是其值。所以,当你说
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
这意味着,由于Margin
是一个属性,因此不允许您直接更改其Thickness
。
或者,您可以使用以下内容,我认为更容易设置对象的Margin
label1.Margin = new Thickness(double left, double top, double right, double bottom);
谢谢, 我希望你觉得这很有帮助:)
答案 1 :(得分:0)
似乎所有参数都是WPF Margin属性的必需参数,尽管您可能只需要更改一个或两个属性值...
使用Google搜索我在Java和ASP.net中看到使用margin属性设置了所有4个值。
但是这个例子允许用户检索Label.Margin.Left值但是...... http://forums.asp.net/t/1834713.aspx/1
答案 2 :(得分:0)
这里的要点是,在临时struct
值内分配属性是没有意义的,因为它没有持久效果。
System.Windows.Thickness是struct
,label1.Margin
是Thickness
的{{1}}值的副本。label1
。它是一个副本,因为struct
是按值传递的。由于您只会更改label1.Margin.Left
副本中Left
的值,因此无法指定label1.Margin
。
您可以做的是以下内容:
Thickness t = label1.Margin;
t.Left = ......; // assign your value here
label1.Margin = t;
另请参阅MSDN page for the CS1612 error。
工具提示是说“获取或设置...”,因为您可以获取或设置Margin
的{{1}}属性,但在您的特定情况下,没有任何一点分配给{{1} } label1
的属性。