为什么我不能更改保证金?

时间:2012-10-28 04:01:31

标签: c# wpf margin

enter image description here 在顶部它说,“获取或设置 ......”,那么为什么不让我改变它?

3 个答案:

答案 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.Thicknessstructlabel1.MarginThickness的{​​{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的属性。