我有一个实现IValueConverter
的通用类。像这样的东西:
class MyValueConverter<T> : IValueConverter
使用 XAML 2009,我可以这样使用它:
<my:MyValueConverter x:TypeArguments='x:String'/>
但显然“已编译”XAML 不允许这样做(我想我们将不得不等待 .NET 5)
我目前的解决方法是为每次使用对其进行子类化:
class FooMyValueConverter : MyValueConverter<Foo>
是否可以仅使用 XAML 2006 在标记中执行此操作?
最佳答案
您可能可以使用自定义 MarkupExtension 来做到这一点(archive)(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}}}
那样使用它
关于c# - 使用 XAML 中的通用 IValueConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5833143/