使用在XAML资源中声明的数组

时间:2012-12-13 21:33:03

标签: c# xaml

我的目标是从XAML资源文件中检索ObservableCollection<Color>,但我使用的是.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),但我不确定应该传递给它。

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:-1)

转换为ArrayExtension,您的值位于Items属性