【问题标题】:Exception thrown when resources declaration order changed资源声明顺序改变时抛出异常
【发布时间】:2009-03-31 23:48:20
【问题描述】:

按此顺序声明资源时出现异常:

<Window.Resources>
    <sys:Object x:Key="resourceA"></sys:Object>

    <x:Array x:Key="resourceB" Type="sys:String">
        <sys:String>foo</sys:String>
    </x:Array>
</Window.Resources>

当以这种方式声明时,一切正常:

<Window.Resources>
    <x:Array x:Key="resourceB" Type="sys:String">
        <sys:String>foo</sys:String>
    </x:Array>

    <sys:Object x:Key="resourceA"></sys:Object>
</Window.Resources>

抛出的异常是:

无法转换属性中的值 'ItemsSource' 到对象类型 'System.Collections.IEnumerable'。 'System.Windows.Markup.ArrayExtension' 不是属性的有效值 '项目来源'。对象错误 'System.Windows.Controls.ComboBox' 在 标记文件 'WpfResourcesBug;组件/window1.xaml' 第 18 行位置 37。

完整代码:

<Window x:Class="WpfResourcesBug.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <sys:Object x:Key="resourceA"></sys:Object>

        <x:Array x:Key="resourceB" Type="sys:String">
            <sys:String>foo</sys:String>
        </x:Array>
    </Window.Resources>

    <StackPanel>
        <ComboBox SelectedIndex="0" ItemsSource="{StaticResource resourceB}" />
    </StackPanel>
</Window>

【问题讨论】:

    标签: wpf resources


    【解决方案1】:

    我想你可能会找到一个可能的解决方案here

    【讨论】:

    • 我试过 {Binding Source={StaticResource resourceB}},但在组合框中没有得到任何项目。没有抛出异常,但问题没有解决。同样,如果资源声明顺序发生变化,这两种情况都可以正常工作。
    • 我认为这又归结为数组没有被解析为可枚举的集合。基本上这就是您之前的错误消息的来源。您是否考虑过使用 ObjectDataProvider 方法?类似codeproject.com/KB/WPF/FillComboboxWSortedEnum.aspx
    • 如果我们只删除resourceA,数组成功解析为一个可枚举的集合。所以问题不在于Array本身,而在于resourceA,甚至是声明顺序。这对我来说毫无意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2013-05-20
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多