private void TreeViewItemExt_Drop(object sender, DragEventArgs e) { TreeViewItemExt tvie = sender as TreeViewItemExt; if (tvie != null && !tvie.IsDragging && e != null) { IDataObject data = e.Data; if (data.GetDataPresent(typeof(Nodes.Node).ToString())) { Nodes.Node payload = data.GetData(typeof(Nodes.Node)) as Nodes.Node; if (payload != null && this.DragNDropCmd != null) { // inform user string message = string.Format("moving {0}\nto {1}", payload.ToString(), this.Header.ToString()); string caption = "Moving Node"; MessageBoxResult answer = MessageBox.Show(message, caption, MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No); if (answer == MessageBoxResult.Yes) { // execute drop command this.DragNDropCmd.Execute(new WinUtils.TwoObjects { object1 = payload, object2 = this.Header }); e.Handled = true; } // restore the visual style of any containing nodes TreeViewItemExt.RestoreVisualStylesAfterDrop(); } } } }
protected override DependencyObject GetContainerForItemOverride() { TreeViewItemExt container = new TreeViewItemExt(); container.DragNDropCmd = this.DragNDropCmd; container.Tag = this.Tag + "." + (++this.nr_subnodes).ToString(); return(container); }
protected override DependencyObject GetContainerForItemOverride() { TreeViewItemExt container = new TreeViewItemExt(); container.DragNDropCmd = this.DragNDropCmd; this.Counter++; container.Tag = this.Counter.ToString(); return(container); }
private void TreeViewItemExt_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { TreeViewItemExt tvie = sender as TreeViewItemExt; if (tvie != null && e != null) { this.mouseMove_startingP = e.GetPosition(null); } }
private void TreeViewItemExt_DragOver(object sender, DragEventArgs e) { TreeViewItemExt tvie = sender as TreeViewItemExt; if (tvie != null && !tvie.IsDragging && e != null) { IDataObject data = e.Data; if (!data.GetDataPresent(typeof(Nodes.Node).ToString())) { e.Effects = DragDropEffects.None; e.Handled = true; } } }
private void TreeViewItemExt_DragLeave(object sender, DragEventArgs e) { TreeViewItemExt tvie = sender as TreeViewItemExt; if (tvie != null && !tvie.IsDragging) { this.CouldBeDropTarget = false; TreeViewItemExt.drop_target_chain.Remove(this); System.Windows.Style copy = new Style(typeof(TreeViewItem), this.Style); copy.Setters.Add(new Setter(TreeViewItem.BorderBrushProperty, TreeViewItemExt.STANDARD)); copy.Setters.Add(new Setter(TreeViewItem.BorderThicknessProperty, new Thickness(0))); this.Style = copy; } }
private static void PropagateDragNDropCmd(DependencyObject d, DependencyPropertyChangedEventArgs e) { TreeViewExt tve = d as TreeViewExt; if (tve != null) { foreach (object item in tve.Items) { TreeViewItemExt tvie = tve.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItemExt; if (tvie != null) { tvie.DragNDropCmd = tve.DragNDropCmd; } } } }
// runs from LEAF to ROOT private void TreeViewItemExt_MouseMove(object sender, MouseEventArgs e) { TreeViewItemExt tvie = sender as TreeViewItemExt; if (tvie != null && e != null) { if (!tvie.IsSelected) { return; } if (e.LeftButton == MouseButtonState.Pressed && !IsDragging) { Point pos = e.GetPosition(null); // check if the mouse moved far enough: bool enoughX = Math.Abs(pos.X - mouseMove_startingP.X) > 2 * SystemParameters.MinimumHorizontalDragDistance; bool enoughY = Math.Abs(pos.Y - mouseMove_startingP.Y) > 2 * SystemParameters.MinimumVerticalDragDistance; if (enoughX || enoughY) { this.mouseMove_startingP = pos; this.StartDrag(e); } } } }