using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Data; using System.Windows.Markup; namespace AntDesign.WPF.Converters; /// /// 构造单例的Converter的markup /// /// /// 示例代码: /// /// ]]> /// /// public class GenericConverterExtension : MarkupExtension { public Type Type { get; set; } private static readonly Dictionary _instances = new(); public override object ProvideValue(IServiceProvider serviceProvider) { if (Type == null || !typeof(IValueConverter).IsAssignableFrom(Type)|| !typeof(IMultiValueConverter).IsAssignableFrom(Type)) throw new InvalidOperationException("类型必须是值转换器"); if (!_instances.TryGetValue(Type, out var instance)) _instances[Type] = instance = Activator.CreateInstance(Type); return instance; } }