publicclass ClickableTreeViewAdapterFactory : IUIElementAdapterFactory ...{ IUIElementManagerFactory Members#region IUIElementManagerFactory Members public IUIElementAdapter GetAdapter(object managedExtension) ...{ if (managedExtension is ClickableTreeNode) returnnew ClickableTreeViewAdapter(managedExtension as ClickableTreeNode); elseif (managedExtension is ClickableTreeView) returnnew ClickableTreeViewAdapter(managedExtension as ClickableTreeView); returnnull; } #endregion IUIElementAdapterFactory Members#region IUIElementAdapterFactory Members publicbool Supports(object uiElement) ...{ if (uiElement is ClickableTreeNode) returntrue; elseif (uiElement is ClickableTreeView) returntrue; else returnfalse; } #endregion }
publicclass ClickableTreeViewAdapter: UIElementAdapter<ClickableTreeNode> ...{ private ClickableTreeView _managed =null; private ClickableTreeNode _managedNode =null; public ClickableTreeViewAdapter(ClickableTreeView element) ...{ _managed = element; } public ClickableTreeViewAdapter(ClickableTreeNode node) ...{ _managedNode = node; } protectedoverridevoid Remove(ClickableTreeNode uiElement) ...{ if (_managed !=null) ...{ if (!_managed.IsDisposed) ...{ if (_managed.Nodes.Contains(uiElement)) _managed.Nodes.Remove(uiElement); } } elseif (_managedNode !=null) ...{ if (!_managedNode.TreeView.IsDisposed) ...{ if (_managedNode.Nodes.Contains(uiElement)) _managedNode.Nodes.Remove(uiElement); } } } protectedoverride ClickableTreeNode Add(ClickableTreeNode item) ...{ if (_managed !=null) ...{ if (item.NeedsSetup) item.SetUp(_managed); _managed.Nodes.Add(item); } elseif (_managedNode !=null) ...{ if (item.NeedsSetup) item.SetUp(_managedNode.TreeView); _managedNode.Nodes.Add(item); } return item; } }
3、在初始化阶段注册我们自定义的界面工厂
protectedoverridevoid AfterShellCreated() ...{ base.AfterShellCreated(); IUIElementAdapterFactoryCatalog catalog = RootWorkItem.Services.Get<IUIElementAdapterFactoryCatalog>(); catalog.RegisterFactory(new ClickableTreeViewAdapterFactory()); // both main menus should have their items added to the root nodes collection RootWorkItem.UIExtensionSites.RegisterSite(UIExtensionConstants.MAINMENU, Shell.MainNavigationTree); // Load the menu structure from App.config UIElementBuilder.LoadFromConfig(RootWorkItem, Shell.MainNavigationTree); }