3

在此处输入图像描述 在顶部它说,“获取或设置......”,那么为什么不让我改变它呢?

4

3 回答 3

4

您不能这样做,因为尽管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);

谢谢,
我希望你觉得这有帮助:)

于 2012-10-28T05:41:19.770 回答
0

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

通过 Google 搜索,我在 Java 和 ASP.net 中看到使用设置了所有 4 个值的 margin 属性。

然而,这个例子允许用户检索 Label.Margin.Left 值虽然...... http://forums.asp.net/t/1834713.aspx/1

于 2012-10-28T05:30:19.207 回答
0

这里的要点是,在临时值内分配给属性是没有意义的struct,因为它没有持久的影响。

System.Windows.Thicknessstruct, 并且label1.Margin是的边距值的副本。这是一个副本,因为s 是按值传递的。分配给没有意义,因为您只会更改.Thicknesslabel1structlabel1.Margin.LeftLeftlabel1.Margin

您可以执行以下操作:

Thickness t = label1.Margin;
t.Left = ......; // assign your value here
label1.Margin = t;

有关CS1612 错误,另请参阅MSDN 页面。

工具提示说“获取或设置...”,因为您可以获取或设置 的Margin属性,但在您的特定情况下,分配给 的属性是label1没有意义的。Leftlabel1.Margin

于 2012-10-28T10:36:03.783 回答