2016-07-08 15 views
0

ich die Klasse haben CaptureResolution die Auflösung für eine Kamera-Capture darstellt:Benutzerdefinierte Art nicht in Anwendung Einstellungen zu speichern

[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) 
    { 
    } 
} 

ich eine Einstellung in den Einstellungen Designer mit dem angegebenen Typ hinzugefügt:

enter image description here

jedoch beim Aufruf dieses

Properties.Settings.Default.ResolutionSelection = new CaptureResolution(1920, 1080); 
Properties.Settings.Default.Save(); 

Die Einstellung wird nicht in der Benutzereinstellungsdatei gespeichert:

<setting name="ResolutionSelection" serializeAs="Xml"> 
    <value /> 
</setting> 

ich sicher überprüfen kann, dass der Wert auf die Einstellung der Eigenschaft zugeordnet ist. Ansonsten würde das Programm überhaupt nicht funktionieren. Ich habe auch einen Blick auf den Debugger geworfen.

Auch ich suchte bereits im Internet nach geeigneten Lösungen, aber am Ende hat es nicht wirklich geholfen. Andere Einstellungen werden ohne Probleme gespeichert.

Afaik Der Einstellungsdesigner benötigt eine Klasse, die nach XML serialisiert werden kann, und einen parameterlosen Standardkonstruktor, der öffentlich zugänglich ist. Ich habe beides gemacht, also frage ich mich, warum es nicht wie geplant funktioniert.

Zusätzliche Frage

Wie kann ich einen Standardwert dieser benutzerdefinierten Typ Einstellung zuweisen? Die Eingabe new FaceDetection.Model.CaptureResolution() endet in einer Ausnahme.

Antwort

1

Du Ableitung CaptureResolution von ApplicationSettingsBase:

public class CaptureResolution: ApplicationSettingsBase 

Tu das nicht. Es besteht keine Notwendigkeit, dies zu tun, und dies funktioniert offensichtlich nicht.

Standardwert

Die Einstellungen desinger wird ein Settings.cs erstellen, wenn Sie auf den „Code anzeigen“ Knopf auf seiner Oberseite klicken. In dieser Settings.cs Datei können Sie Ihren eigenen Code hinzufügen und Sie können Anwendungseinstellungen manuell erstellen, z. etwas wie das:

[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; } 
} 

Dies wird einen Standardwert erstellen, wenn die Einstellung null ist. Sie müssen die Einstellung entfernen, die Sie mit dem Desinger erstellt haben.

+0

Danke. Lief wie am Schnürchen. – chris579