private void CreateTypedDescendant(TreeViewItem root, NetworkNode node, NetworkEdgeType currentType) { NetworkEdge edge = node.GetTypedOutgoingEdge(currentType); if (edge != null) { string str = Utils.ConvertToResourcesType(currentType) + "TemplateKey"; DataTemplate template = Application.Current.TryFindResource(str) as DataTemplate; str = Utils.ConvertToResourcesType(currentType) + "ItemTemplateKey"; DataTemplate itemTemplate = Application.Current.TryFindResource(str) as DataTemplate; TreeViewItem linkRoot = new TreeViewItem(); linkRoot.Header = Utils.ConvertType(edge.Type); linkRoot.HeaderTemplate = template; linkRoot.ContextMenu = _linkMenu; linkRoot.Uid = edge.Id.ToString(); LoadItemState(edge.Id, node, linkRoot); root.Items.Add(linkRoot); NetworkNode nodeDesc = edge.EndNode; TreeViewItem nodeTreeItem = CreateNodeItem(nodeDesc, itemTemplate); LoadItemState(nodeDesc.Id, edge, nodeTreeItem); linkRoot.Items.Add(nodeTreeItem); } }