在属性中保存按钮边距厚度
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 的名称与属性的名称匹配,则可以使用反射。
- 查找类型为
Button
的所有属性
- 将所有
Button
个对象存储在一个集合中
遍历每个按钮
在该循环中,根据当前按钮的名称查找默认属性对象的属性。将 L、R、T 或 B 附加到名称并使用反射来查找并相应地设置 属性。
您可以将此方法与@DenisThomas 的回答结合起来。然后你只需要在循环中找到一个 属性 而不是四个
您可以直接使用 Thickness
作为设置类型。
从可用类型列表中选择 Browse...
:
然后是 select PresentationFramework
程序集,然后是命名空间 System.Windows
,您将在其中找到类型 Thickness
:
结果是这样的:
现在我将 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 的名称与属性的名称匹配,则可以使用反射。
- 查找类型为
Button
的所有属性
- 将所有
Button
个对象存储在一个集合中 遍历每个按钮
在该循环中,根据当前按钮的名称查找默认属性对象的属性。将 L、R、T 或 B 附加到名称并使用反射来查找并相应地设置 属性。
您可以将此方法与@DenisThomas 的回答结合起来。然后你只需要在循环中找到一个 属性 而不是四个
您可以直接使用 Thickness
作为设置类型。
从可用类型列表中选择 Browse...
:
然后是 select PresentationFramework
程序集,然后是命名空间 System.Windows
,您将在其中找到类型 Thickness
:
结果是这样的: