在窗体TreeView最好的办法,以可扩展节点类型和上下文行动
-
06-09-2019 - |
题
我正在一个Visual Studio外接的Visual Studio 2008的显示树视图,其提供关于在服务器产品内容的图。服务器产品含有不同类型的节点,并且每个节点都有其自己的类型的上下文菜单的(右击菜单)。
有关连接到目前,我只是将代码添加我的两个项目的节点新类型的节点和行动。我想断开我的节点类型和节点上可用的行动,我可以添加节点和条目,以上下文菜单插件模型等几个。 MEF可能会是一个很好的候选。有没有人对如何实现这个简单而直接的方式是一个好主意,这样特别的插件开发者不必做很多管道的?
解决方案
我将提供一个公共库,你的代码和插件库都全部链接(这个合同的依赖)。在那里,定义一个节点类型,像INodeType的接口。此外,考虑实施在那里实现INodeType,并提供一些有用的特性的AbstractNodeType该插件作者可以在其构造函数中设置。
一INodeType的属性是一个返回窗户ContextMenu属性形成上下文菜单。
在你的代码,使属性:
[Import("NodeTypes", typeof(INodeType))]
public IEnumerable<INodeType> extensionNodeTypes { get; set; }
您可以通过枚举只是你以后组成
在插件代码,它们将宣布新的节点类型是这样的(可能无法编译):
[Export("NodeTypes", typeof(INodeType))]
public class SomeNodeType : AbstractNodeType
{
public SomeNodeType()
{
this.ContextMenu = base.BuildContextMenu(/* ... */);
/* etc. */
}
/* ... other custom logic ... */
}
我希望我没有乱了语法,但这是一般的想法。
不隶属于 StackOverflow