2016-07-08 44 views
0

我表示对相机拍摄分辨率类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) 
    { 
    } 
} 

我添加了一个设置成设置设计师利用给定类型:

enter image description here

但是,当拨打电话

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()以异常结束。

回答

1

您从ApplicationSettingsBase获得CaptureResolution

public class CaptureResolution: ApplicationSettingsBase 

不要那样做。没有必要这样做,而这样做显然不起作用。

默认值

的设置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。您必须删除使用设定器创建的设置。

+0

谢谢。像魅力一样工作。 – chris579

相关问题