【问题标题】:Save Button Margin Thickness in Properties在属性中保存按钮边距厚度
【发布时间】:2015-07-31 06:21:05
【问题描述】:

现在我将 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} 或通过应用一些循环并自行创建动态设置变量并在新运行时分配它们。

提前致谢。

【问题讨论】:

  • 向你的班级展示你在哪里做的。
  • 到目前为止,我还没有使用任何类,只是在我的代码中实现了用于测试 1 个按钮 @DeshDeepSingh

标签: c# wpf xaml properties


【解决方案1】:

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

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

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

结果是这样的:

【讨论】:

  • 我试图在 System.Window 中寻找厚度但不存在
  • 知道了,我正在查看 WindowBase 而不是 PresenttionFramework
  • 我可以为多个按钮使用单个属性还是必须为所有按钮创建特定变量?
  • 您当然可以对所有按钮使用相同的设置。
  • +1 供Browse...使用。我已经多次注意到它,但在我看到这个答案之前从未真正发现它的用途。
【解决方案2】:

您可以使用厚度转换器。它有一个函数 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);

【讨论】:

  • 你能详细说明一下吗?
  • 类型转换不会抛出异常吗?
  • 感谢它的工作,但存储边距的过程也会相同吗?
【解决方案3】:

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

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

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

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

【讨论】:

  • 您好,感谢您的回复,+1 以简单的方式解释了该过程,但实际上您所说的第 1 步我尝试与 findchildren 一起尝试但无法找到它们。你能帮忙吗
【解决方案4】:

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

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

【讨论】:

  • 这不是我想要的
猜你喜欢
  • 2011-11-06
  • 2011-11-09
  • 2019-04-20
  • 2013-03-16
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2014-04-13
相关资源
最近更新 更多