private void AddNode(CsgNode node) { if (root == null) { return; } CsgNodeWrapper wrapper = root.Node.Repository.GetWrapper(node); CsgNodeTreeViewItem item = nodeView.SelectedItem as CsgNodeTreeViewItem; CsgGroupWrapper selected = null; while (item != null) { selected = item.Node as CsgGroupWrapper; if (selected != null) { break; } item = item.Parent as CsgNodeTreeViewItem; } if (selected == null) { selected = root.Node as CsgGroupWrapper; } if (selected != null) { selected.AddChild(wrapper); } }
protected override void OnDrop(DragEventArgs e) { string[] ids = (e.Data.GetData(DataFormats.Text) as string ?? string.Empty).Split('|'); e.Handled = true; if (ids.Length == 2) { CsgNodeWrapper wrapper = Node.Repository.GetWrapperById(ids[0]); if (e.Effects == DragDropEffects.Move) { CsgGroupWrapper parent = Node.Repository.GetWrapperById(ids[1]) as CsgGroupWrapper; if (wrapper != null && parent != null) { CsgNodeTreeViewItem item = this; while (item != null) { if (item.Node == wrapper) { return; } item = item.Parent as CsgNodeTreeViewItem; } if (parent.RemoveChild(wrapper)) { if (!Group.AddChild(wrapper)) { parent.AddChild(wrapper); } } IsSelected = true; } } else if (e.Effects == DragDropEffects.Link) { if (wrapper != null) { Group.AddChild(wrapper); IsSelected = true; } } } base.OnDrop(e); }