您可以为WPF中的某些窗口属性设置默认值。例如,你可以设置一个画布' XAML中的宽度或TextBlock文本然后您的应用可以通过访问控件来更改它们。是否有任何方法可以将这些值设置为在XAML中声明它们的方式而不自行保存它们?它们是否存放在某处,以便您可以在运行时访问它们?
答案 0 :(得分:0)
我认为WPF无法知道您的默认值是什么,但您可以创建自己的属性,其中包含有关默认值的信息以及将设置该值的create方法。
首先,我们需要一个属性来保存有关给定属性的默认值的信息:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
class DefaultAttribute : Attribute
{
public object Value;
public DefaultAttribute(object value)
{
this.Value = value;
}
}
鉴于此属性,我们可以轻松地为我们的属性声明默认值,如下所示:
class ViewModel
{
[Default("Noname")]
public string Name { get; set; }
public int Age { get; set; }
}
然后,如果您要将默认值应用于视图模型,则需要某种方法来为您执行此操作:
private static void ApplyDefaults(object model)
{
PropertyInfo[] properties = model.GetType().GetProperties();
foreach (var property in properties)
{
DefaultAttribute defaultAttr = property.GetCustomAttribute<DefaultAttribute>();
if (defaultAttr != null)
property.SetValue(model, defaultAttr.Value);
}
}
使用示例程序:
public static void Main()
{
var vm = new ViewModel();
Console.WriteLine($"Start - {vm}");
ApplyDefaults(vm);
Console.WriteLine($"ApplyDefaults - {vm}");
vm.Name = "Damian";
vm.Age = 23;
Console.WriteLine($"After using setters - {vm}");
ApplyDefaults(vm);
Console.WriteLine($"After ApplyDefaults - {vm}");
}
该计划的输出是:
开始 - - 0
ApplyDefaults - Noname - 0
使用二传手后 - 达米安 - 23
在ApplyDefaults之后 - Noname - 23
我刚检查过.NET有DefaultValue Attribute,您可以用类似的方式使用它。
答案 1 :(得分:0)
我的问题是,是否有一个函数或一些hacky方法将所有值设置为wpf api中的某个默认值?
不,没有。
您最好关闭窗口并创建一个新窗口。或者你必须手动&#34;通过编写自己的自定义代码来重置所有值。
如果您想要重置控件属性的值而不在某处指定它,那么框架就不应该知道。指定它的方法是编写代码。