c# - 如何为我不拥有的类型和属性实现 TypeConverter?

标签 c# wpf xaml typeconverter

这很烦人:

<GeometryDrawing>
    <GeometryDrawing.Pen>
        <Pen Brush="Black"/>
    </GeometryDrawing.Pen>
</GeometryDrawing>

我想要这个:

<GeometryDrawing Pen="Black"/>

所以我写了一个TypeConverter:

public class PenConverter : TypeConverter
{
    static readonly BrushConverter brushConverter = new BrushConverter();

    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        if (sourceType == typeof(string)) return true;
        return base.CanConvertFrom(context, sourceType);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        var s = value as string;
        if (a != null)
        {
            var brush = brushConverter.ConvertFromInvariantString(s) as Brush;
            return new Pen(brush, 1);
        }
        return base.ConvertFrom(context, culture, value);
    }
}

现在,如何将它与 Pen 类型联系起来?我不能只向它添加 TypeConverterAttribute,因为我不拥有它(我也不拥有 GeometryDrawing.Pen 属性)。

最佳答案

This link here声称你可以做类似的事情(逐字复制,归功于那个人)

public static void Register<T, TC>() where TC: TypeConverter
{
 Attribute[] attr = new Attribute[1];
 TypeConverterAttribute vConv = new TypeConverterAttribute(typeof(TC));
      attr[0] = vConv;
 TypeDescriptor.AddAttributes(typeof(T), attr);
}

该方法的最后一部分似乎可以解决问题。

关于c# - 如何为我不拥有的类型和属性实现 TypeConverter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1999803/

相关文章:

c# - 8皇后算法示例?

c# - 如何清除Viewstate?

wpf - DataGrid表显示额外的不必要的空行

数据绑定(bind)属性更新的 WPF 平滑过渡

linq - 可以在 XAML 中绑定(bind) IGrouping 枚举吗?如果是这样,绑定(bind)语法会是什么样子?

c# - WPF 上下文菜单命令绑定(bind)

c# - 在 C# 中调整图片框大小的代码是什么?

c# - 如何将 Asp.net 页面与 Python 项目集成?

WPF如何在最大化窗口时免除任务栏

c# - 使用 Process.Start() 时 Windows 窗体 MouseUp 触发两次