Wpf XAML设计器错误“;无法强制转换类型为';System.Windows.StaticResourceExtension';输入';System.Windows.Data.IValueConverter'&引用;
我使用开源XAML标记扩展从声明的Wpf XAML设计器错误“;无法强制转换类型为';System.Windows.StaticResourceExtension';输入';System.Windows.Data.IValueConverter'&引用;,wpf,xaml,markup-extensions,Wpf,Xaml,Markup Extensions,我使用开源XAML标记扩展从声明的enum类型填充,但在设计器中,我收到以下错误(带蓝色斜线的文本): 无法将“System.Windows.StaticResourceExtension”类型的对象强制转换为“System.Windows.Data.IValueConverter”类型 以下是导致错误的XAML(错误位于ItemsSource属性和值上): 以及枚举标记扩展 [ValueConversion(typeof(Enum)、typeof(String))] 公共类EnumToStri
enum
类型填充
,但在设计器中,我收到以下错误(带蓝色斜线的文本):
无法将“System.Windows.StaticResourceExtension”类型的对象强制转换为“System.Windows.Data.IValueConverter”类型
以下是导致错误的XAML(错误位于ItemsSource
属性和值上):
以及枚举
标记扩展
[ValueConversion(typeof(Enum)、typeof(String))]
公共类EnumToString转换器:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
...
}
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
...
}
}
[MarkupExtensionReturnType(typeof(IEnumerable))]
公共密封类扩展名:MarkupExtension
{
公共扩展()
{
}
公共枚举扩展(类型、对象转换器)
{
...
//转换器必须是对象,否则WPF会抱怨其他错误
}
}
奇怪的是,当程序运行并且
EnumerateExtension
正确地将枚举的成员(也本地化)加载到组合框中时,这实际上起作用。将ItemsSource属性值更改为:
ItemsSource="{local:Enumerate Type={x:Type p:FoobarEnum}, Convertor={StaticResource e2s}}"
这将起到110%的作用
问题是,XAML解析器弄不清楚哪一个用于类型,哪一个用于转换器。排序和显式提及在XAML中很重要 将ItemsSource属性值更改为:
ItemsSource="{local:Enumerate Type={x:Type p:FoobarEnum}, Convertor={StaticResource e2s}}"
这将起到110%的作用
问题是,XAML解析器弄不清楚哪一个用于类型,哪一个用于转换器。排序和显式提及在XAML中很重要 执行此操作时,会出现此设计器和生成错误:“分析标记扩展时遇到类型为“MS.Internal.Markup.MarkupExtensionParser+UnknownMarkupExtension”的未知属性“Converter”。“执行此操作时,会出现此设计器和生成错误:“分析标记扩展时遇到类型'MS.Internal.Markup.MarkupExtensionParser+UnknownMarkupExtension'的未知属性'Converter'
[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
}
}
ItemsSource="{local:Enumerate Type={x:Type p:FoobarEnum}, Convertor={StaticResource e2s}}"