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

时间:2015-07-31 06:21:05

标签: c# wpf xaml 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},或者通过应用一些循环并自行创建动态设置变量并在新运行时分配它们。

提前致谢。

4 个答案:

答案 0 :(得分:3)

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

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

enter image description here

然后选择PresentationFramework程序集,并从那里选择名称空间System.Windows,您将在其中找到类型Thickness

enter image description here

结果如下:

enter image description here

答案 1 :(得分:1)

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

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

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

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

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

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);

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:-3)

您必须创建继承自button的类,然后您可以为您的目的添加constructor

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