我有一个类CaptureResolution
表示摄像头捕获的分辨率:
[Serializable]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[XmlRoot (ElementName = "CaptureResolution", IsNullable = false)]
public class CaptureResolution: ApplicationSettingsBase
{
[UserScopedSetting]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[XmlAttribute (AttributeName = "Width")]
public int Width { get; set; }
[UserScopedSetting]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[XmlAttribute(AttributeName = "Height")]
public int Height { get; set; }
public CaptureResolution(int width, int height)
{
Width = width;
Height = height;
}
public CaptureResolution(): this(1024, 720)
{
}
}
我在设置设计器中添加了一个具有给定类型的设置:
然而,在调用此
时Properties.Settings.Default.ResolutionSelection = new CaptureResolution(1920, 1080);
Properties.Settings.Default.Save();
该设置未保存在用户设置文件中:
<setting name="ResolutionSelection" serializeAs="Xml">
<value />
</setting>
我确定可以验证该值是否已分配给该设置的属性。否则该程序根本不起作用。我也看了调试器。
此外,我已经在互联网上搜索了合适的解决方案,但最终它并没有真正帮助。保存其他设置没有任何问题。
Afaik设置设计器需要一个可以序列化为XML的类和一个可公开访问的默认无参数构造函数。我做了两个,所以我想知道它为什么没有按预期工作。
其他问题
如何为此自定义类型设置指定默认值?
输入new FaceDetection.Model.CaptureResolution()
最终会出现异常。
答案 0 :(得分:1)
您从CaptureResolution
ApplicationSettingsBase
public class CaptureResolution: ApplicationSettingsBase
不要这样做。没有必要这样做,这样做显然不起作用。
默认值
如果您点击&#34;查看代码&#34;设置desinger将创建Settings.cs
。顶部的按钮。在此Settings.cs
文件中,您可以添加自己的代码,也可以手动创建应用程序设置,例如类似的东西:
[UserScopedSetting]
public CaptureResolution ResolutionSelection
{
get
{
var value = (CaptureResolution)this[nameof(ResolutionSelection)];
if (value == null)
{
value = new CaptureResolution(1, 2); // decent default value
this[nameof(ResolutionSelection)] = value;
}
return value;
}
set { this[nameof(ResolutionSelection)] = value; }
}
这将创建一个默认值,设置为null。您必须删除使用desinger创建的设置。