3

我的目标是ObservableCollection<Color>从 XAML 资源文件中检索出一个,但我使用的是 .NET 3.5,所以我不能直接在 XAML 中声明泛型类型。我目前的解决方案是在 XAML 中声明一个 Color 数组:

<x:Array Type="Color" x:Key="ColourPickerStandardColours">
    <Color>#974806</Color>
    <Color>#FF0000</Color>
    <Color>#FFC000</Color>
    ...
    <Color>#7030A0</Color>
</x:Array>

并在代码中检索它:

var standardColours = new ObservableCollection<Color>(
    (Color[])TryFindResource("ColourPickerStandardColours"));

当我尝试运行它时,我得到了这个异常:

InvalidCastException
Unable to cast object of type 'System.Windows.Markup.ArrayExtension' to type
    'System.Windows.Media.Color[]'.

ArrayExtension 有IList Items,但我需要泛型IEnumerable<T>来构造一个ObservableCollection<T>. 我想我可以使用ProvideValue(IServiceProvider),但我不确定我应该传递给它什么。

我是在做错什么,还是只是遗漏了一些明显的东西?

4

2 回答 2

4

WPF 在那里使用无类型的集合。只需使用Items.Cast<Color> ().

于 2012-12-14T00:08:38.713 回答
-1

转换为 ArrayExtension,您的值在 Items 属性中

于 2012-12-13T21:49:18.103 回答