使用XAML中的Generic IValueConverter

我有一个实现IValueConverter的generics类。 就像是:

 class MyValueConverter : IValueConverter 

使用XAML 2009,我可以像这样使用它:

  

但显然不允许“编译”的XAML(我想我们必须等待.NET 5)

我目前的解决方法是为每种用法进行子类化:

 class FooMyValueConverter : MyValueConverter 

是否可以仅使用XAML 2006在标记中执行此操作?

您可以使用自定义MarkupExtension ( 存档 )( v4 )执行此操作。 就像是:

 public class MyMarkupExtension : MarkupExtension { public MyMarkupExtension() { this.Type = /* some default type */; } public MyMarkupExtension(Type type) { this.Type = type; } public Type Type { get; private set; } public override object ProvideValue(IServiceProvider serviceProvider) { Type type = typeof(MyValueConverter<>).MakeGenericType(this.Type); return Activator.CreateInstance(type); } } 

那你就像{Binding ... Converter={local:MyMarkup {x:Type BounceEase}}}一样使用它