我正在为Visual Studio编写扩展,并创建了一个类,用于在“属性”窗口中显示自定义信息。我想修改属性窗口顶部的对象列表中显示的文本,但是无法找到执行此操作的方法。我发现这个页面似乎描述了我想要的东西:
但是,该描述似乎不起作用。首先,描述声明“使用IProvideClassInfo接口提供的Name属性从对象本身检索以粗体显示在对象类型左侧的对象名称”,但IProvideClassInfo没有名为“Name”的属性”。此外,描述还指出类“IProvideClassInfo”的方法“GetClassInfo”返回“ITypeInfo”,但该函数的输出参数类型为“Type”,而不是“ITypeInfo”。
我想在属性窗口中显示信息的类目前看起来像这样:
public class MyProperties
{
[Description("MyDescription")]
[Category("MyCategory")]
public string MyProperty { get { return "The text"; } }
}
属性“MyProperty”很好地显示了正确的描述和类别,但我还没有成功修改对象列表中的文本。我试图让“MyClass”类扩展接口“IProvideClassInfo”,但是当信息显示在属性窗口中时,似乎没有执行“GetClassInfo”方法。
我在这里缺少什么?
答案 0 :(得分:3)
我在chat中提出了这个问题,答案是你需要实现ICustomTypeDescriptor接口或从类CustomTypeDescriptor派生。
您需要实现的各个方法是GetComponentName(gridview-header中的粗体/名字)和GetClassName(gridview-header中的light / second名称)。
但是,如果您只是实现这两种方法,则属性网格中不会显示其他属性。 AnkhSVN在他们的AnkhPropertyGridItem中解决了这个问题(非常感谢rhuijben这个解决方案):
{{1}}