我正在使用开源 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}}"
/>
资源在e2s
ResourceDictionary 中声明:
<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 中时,这实际上是有效的。