2016-07-08 46 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

相關問題