通常,您可以通过在代码中手动更改数据类型来在应用程序设置中创建数组。但是,System.Drawing.Color似乎是一个例外。您可以像往常一样在代码中添加它,它甚至可以让您像其他设置一样在图形编辑器中编辑值。似乎序列化数据有问题,因为它随后丢失了。
然后我在代码中查找了编辑器在某处遇到错误的方法,所以在设置文件中尝试了这个:
<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>
然后我没有碰到编辑器并确保任何现有的配置文件都没有了。它仍然无效。
为什么其他数组工作正常,而Color值本身就是默认选项之一,但这种组合根本不起作用?
答案 0 :(得分:1)
最后我这样做了:
首先,我添加了一个名为ColorCollection
的类,它基本上是Color[]
的包装器,只有一个主要区别(事件处理)。
为ColorCollection的Settings类添加了一个属性,然后将设置存储为StringCollection,我使用我在ColorCollection
中添加/重载的方法使用Settings加载和保存事件处理程序手动设置({{1} }和ToString
)。
因为更改和数组下标不会触发Parse
事件,所以我添加了一个名为PropertyChanged
的新事件,可以被其他类调用(Changed
在另一个类中定义因此我们甚至无法在PropertyChanged
类中手动调用它。然后我将事件触发器添加到Settings
语句中。
它很乱,但至少有一定程度的抽象,所以不会立即看到混乱。我最终为设置中需要的大多数数组做了类似的操作,因为我需要在下标更改时触发事件。