我的目标是从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)
,但我不确定应该传递给它。
我做错了什么,或者只是遗漏了一些明显的东西?
答案 0 :(得分:3)
WPF在那里使用无类型集合。只需使用Items.Cast<Color> ()
。
答案 1 :(得分:-1)
转换为ArrayExtension,您的值位于Items属性
中