2011-07-15 58 views
1

通常,您可以通過在代碼中手動更改數據類型來在應用程序設置中創建一個數組。但是,System.Drawing.Color似乎是一個例外。您可以像往常一樣將其添加到代碼中,甚至可以讓您像圖形編輯器一樣在其他設置中編輯值。雖然序列化數據似乎存在問題,隨後丟失。.NET應用程序設置:製作一組顏色值

然後,我在想着代碼編輯器方法已在它得到了一個錯誤的地方,所以這種嘗試在設置文件:

<Setting Name="ChannelColour" Type="System.Drawing.Color[]" Scope="User"> 
    <Value Profile="(Default)"><?xml version="1.0" encoding="utf-16"?> 
    <ArrayOfColor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <color>Cyan</color> 
     <color>DarkOrange</color> 
     <color>Magenta</color> 
     <color>LawnGreen</color> 
    </ArrayOfColor> 
    </Value> 
</Setting> 

並同樣的app.config:

<setting name="ChannelColour" serializeAs="Xml"> 
    <value> 
    <ArrayOfColor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <color>Cyan</color> 
     <color>DarkOrange</color> 
     <color>Magenta</color> 
     <color>LawnGreen</color> 
    </ArrayOfColor> 
    </value> 
</setting> 

然後,我沒有觸及編輯器,並確保任何現有的配置文件在哪裏。它仍然沒有工作。

爲什麼其他數組可以正常工作,並且顏色值本身就是默認選項之一,但組合根本無法工作?

回答

1

最終我做到了這樣的:

首先,我添加了一個名爲ColorCollection類,它基本上是一個包裝只有一個主要區別圍繞Color[](事件處理)。

添加一個屬性來設置類用於ColorCollection,然後存儲在所述的設置,我使用設置加載和保存使用I加入ColorCollectionToStringParse)重載方法/事件處理程序手動設置StringCollection。

由於更改和數組下標不會觸發事件PropertyChanged,我然後加入一個新的事件稱爲Changed可能由其他類(PropertyChanged在另一個類中定義的,所以我們不能手動甚至從內調用它被調用Settings class。然後我把事件觸發器添加到set聲明中

它很混亂,但至少有一定程度的抽象,所以混亂不能立即顯現。在設置中需要,因爲如果下標發生變化,我需要觸發事件

相關問題