【问题标题】:Why can I not change the Margin?为什么我不能更改保证金?
【发布时间】:2012-10-17 20:39:55
【问题描述】:

上面写着“Gets or sets...”,那为什么不让我改呢?

【问题讨论】:

标签: c# wpf margin


【解决方案1】:

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

System.Windows.Thicknessstructlabel1.MarginThickness 值的副本,用于label1 的边距。这是一个副本,因为structs 是按值传递的。分配给label1.Margin.Left 没有意义,因为您只会在label1.Margin 的副本中更改Left 的值。

您可以做以下事情:

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

另请参阅MSDN page for the CS1612 error

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

【讨论】:

    【解决方案2】:

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

    谢谢,
    希望对您有所帮助:)

    【讨论】:

      【解决方案3】:

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

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

      但是,这个示例允许用户检索 Label.Margin.Left 值... http://forums.asp.net/t/1834713.aspx/1

      【讨论】:

        猜你喜欢
        • 2016-01-12
        • 2018-05-08
        • 2018-07-10
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 1970-01-01
        • 2017-09-20
        • 2016-03-10
        相关资源
        最近更新 更多