2011-07-15 22 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声明中

它很混乱,但至少有一定程度的抽象,所以混乱不能立即显现。在设置中需要,因为如果下标发生变化,我需要触发事件

相关问题