在属性中保存按钮边距厚度

Save Button Margin Thickness in Properties

现在我将 4 个属性存储为:

Button1L Double 10
Button1R Double 10
Button1T Double 10
Button1B Double 10

在构造函数中

Button1.Margin = new Thickness(Properties.Setting.Default.Button1L, ...);

保存

Properties.Setting.Default.Button1L = 20;
.
.
.
Properties.Setting.Default.Save();

这工作正常,但我的问题是有将近 20 个按钮,我无法为每个按钮定义 4 个属性。

所以我的问题是有没有办法将厚度存储为 {L,T,R,B} 或通过应用一些循环并自行创建动态设置变量并将它们分配给新的 运行.

提前致谢。

您可以使用 ThicknessConverter。它有一个函数 ConvertFrom() 可用于从字符串中获取厚度:

var converter = new ThicknessConverter();
var thickness = converter.ConvertFrom("1;2;3;4");

这将从字符串中解析粗细。请注意,根据当前文化,它不会接受 ',' 作为分隔符,因此使用 ';' 应该是安全的。

使用这种方法可以简化配置,因为每个按钮只需要一个字符串 Property/Value 而不是四个单独的双精度值,这样可以节省一些工作。

因此在您的情况下,您将按以下方式使用它:

var converter = new ThicknessConverter();
Button1.Margin = (Thickness)converter.ConvertFrom(Properties.Setting.Default.Button1);

其中 Properties.Setting.Default.Button1 将是包含边距定义的字符串 属性

要存储值,您可以使用如下方式:

string strValue = converter.ConvertToString(Properties.Setting.Default.Button1.Margin);

您必须创建继承自 button 的 class,然后您可以根据需要将 constructor 添加到 class。

新的点网版本中存在另一种方法,
新方法是 extension method

如果 Button 的名称与属性的名称匹配,则可以使用反射。

  1. 查找类型为 Button
  2. 的所有属性
  3. 将所有 Button 个对象存储在一个集合中
  4. 遍历每个按钮

    在该循环中,根据当前按钮的名称查找默认属性对象的属性。将 L、R、T 或 B 附加到名称并使用反射来查找并相应地设置 属性。

    您可以将此方法与@DenisThomas 的回答结合起来。然后你只需要在循环中找到一个 属性 而不是四个

您可以直接使用 Thickness 作为设置类型。

从可用类型列表中选择 Browse...

然后是 select PresentationFramework 程序集,然后是命名空间 System.Windows,您将在其中找到类型 Thickness:

结果是这样的: