2

我正在使用开源 XAML 标记扩展<ComboBox>从声明的enum类型中填充 a,但在设计器中我收到这些错误(蓝色波浪线下划线文本):

无法将“System.Windows.StaticResourceExtension”类型的对象转换为“System.Windows.Data.IValueConverter”类型。

这是导致错误的 XAML(错误在ItemsSource属性和值上):

<ComboBox
    ItemsSource="{local:Enumerate {x:Type p:FoobarEnum}, {StaticResource e2s}}"
    SelectedItem="{Binding Foobar, Converter={StaticResource e2s}}"
/>

资源在e2sResourceDictionary 中声明:

<v:EnumToStringConverter x:Key="e2s" />

Enumerate标记扩展来自这个GitHub 项目

[ValueConversion( typeof( Enum ), typeof( String ) )]
public class EnumToStringConverter : IValueConverter
{
    public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture)
    {
        ...
    }
    public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture)
    {
        ...
    }
}

[MarkupExtensionReturnType( typeof( IEnumerable<Object> ) )]
public sealed class EnumerateExtension : MarkupExtension
{
    public EnumerateExtension()
    {
    }

    public EnumerateExtension(Type type, Object converter)
    {
        ...
        // converter needs to be Object otherwise WPF complains with other errors
    }
}

奇怪的是,当程序运行并将EnumerateExtension枚举的成员(也已本地化)正确加载到 ComboBox 中时,这实际上是有效的。

4

1 回答 1

-1

将您的 ItemsSource 属性值更改为:

ItemsSource="{local:Enumerate Type={x:Type p:FoobarEnum}, Convertor={StaticResource e2s}}"

这将工作 110%。

问题是 XAML 解析器无法确定哪个用于 Type,哪个用于 Convertor。排序和显式提及在 XAML 中很重要。

于 2015-10-06T05:04:59.223 回答