在顶部它说,“获取或设置......”,那么为什么不让我改变它呢?
3 回答
您不能这样做,因为尽管Margin.Left
获取或设置,但它并没有像变量一样使用。就像Padding
.
您可能会注意到,Margin
(as for Padding
) 是一个属性并且Thickness
是它的值。所以,当你说
label1.Margin.Left = MainGrid.ActualHeight / 2 - label1.ActualHeight / 2;
您只是在编辑一个副本( Margin
),因为Margin
返回一个 struct( 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);
谢谢,
我希望你觉得这有帮助:)
似乎所有参数对于 WPF Margin 属性都是强制性的,尽管您可能希望一次只更改一个或两个属性值......
通过 Google 搜索,我在 Java 和 ASP.net 中看到使用设置了所有 4 个值的 margin 属性。
然而,这个例子允许用户检索 Label.Margin.Left 值虽然...... http://forums.asp.net/t/1834713.aspx/1
这里的要点是,在临时值内分配给属性是没有意义的struct
,因为它没有持久的影响。
System.Windows.Thickness是struct
, 并且label1.Margin
是的边距值的副本。这是一个副本,因为s 是按值传递的。分配给没有意义,因为您只会更改.Thickness
label1
struct
label1.Margin.Left
Left
label1.Margin
您可以执行以下操作:
Thickness t = label1.Margin;
t.Left = ......; // assign your value here
label1.Margin = t;
有关CS1612 错误,另请参阅MSDN 页面。
工具提示说“获取或设置...”,因为您可以获取或设置 的Margin
属性,但在您的特定情况下,分配给 的属性是label1
没有意义的。Left
label1.Margin