C# 为什么我不能更改边距?
C# 为什么我不能更改边距?,c#,wpf,margin,C#,Wpf,Margin,顶部写着“获取或设置”,那么为什么不让我更改它呢?似乎所有参数对于WPF Margin属性都是必需的,尽管您可能希望一次只更改一个或两个属性值 在Google search中,我看到Java和ASP.net都使用margin属性设置了所有4个值 但是,此示例允许用户检索Label.Margin.Left值,尽管。。。 您不能这样做,因为尽管Margin.Left获取或设置了Margin.Left,但它并不像变量那样使用。就像填充一样 您可能会注意到,边距(对于填充)是一个属性,厚度是它的值。所以
顶部写着“获取或设置”,那么为什么不让我更改它呢?似乎所有参数对于WPF Margin属性都是必需的,尽管您可能希望一次只更改一个或两个属性值 在Google search中,我看到Java和ASP.net都使用margin属性设置了所有4个值 但是,此示例允许用户检索Label.Margin.Left值,尽管。。。
您不能这样做,因为尽管
Margin.Left
获取或设置了Margin.Left,但它并不像变量那样使用。就像填充一样
您可能会注意到,边距
(对于填充
)是一个属性,厚度
是它的值。所以,当你说
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
这意味着,由于边距
是一个属性,因此不允许直接更改其厚度
或者,您可以使用以下方法,我认为这更容易设置对象的
边距
label1.Margin = new Thickness(double left, double top, double right, double bottom);
谢谢,
我希望这对您有所帮助:)这里的要点是,在临时结构
值中指定属性没有意义,因为它没有持久的效果
是一个struct
,和label1。Margin
是label1
的边距的Thickness
值的副本。它是一个副本,因为struct
s是按值传递的。分配给label1.Margin.Left
没有意义,因为您将只更改label1.Margin
副本中Left
的值
您可以改为执行以下操作:
厚度t=label1.余量;
t、 左=……;//在此处指定您的值
标签1.边缘=t;
另见
工具提示说“获取或设置…”,因为您可以获取或设置label1
的Margin
属性,但在您的特定情况下,没有必要指定label1.Margin
的Left
属性。