2009-06-22 5 views
15

Je suis en train de faire glisser et déposer des fichiers dans mon TreeView, mais je ne sais pas pourquoi il tomber si je le lance et essayez de faire glisser un fichier.Drag & Drop dans Treeview

Le code ci-dessous est ce que j'ai essayé. S'il vous plaît aider.

private void TreeViewItem_Drop(object sender, DragEventArgs e) 
{ 
    TreeViewItem treeViewItem = e.Source as TreeViewItem; 
    TreeViewItem obj = e.Data.GetData(typeof(TreeViewItem)) as TreeViewItem; 

    if ((obj.Parent as TreeViewItem) != null) 
    { 
     (obj.Parent as TreeViewItem).Items.Remove(obj); 
    } 
    else 
    { 
     treeViewItem.Items.Remove(obj); 
     treeViewItem.Items.Insert(0, obj); 
     e.Handled = true; 
    } 
} 

private void TreeViewItem_MouseLeftButtonDown(object sender,MouseButtonEventArgs e) 
{ 
    DependencyObject dependencyObject = _treeview.InputHitTest(e.GetPosition(_treeview)) as DependencyObject; 

    Debug.Write(e.Source.GetType().ToString()); 

    if (dependencyObject is TextBlock) 
    { 
     TreeViewItem treeviewItem = e.Source as TreeViewItem; 

     DragDrop.DoDragDrop(_treeview, _treeview.SelectedValue, DragDropEffects.Move); 
     e.Handled = true; 
    } 
} 

Répondre

42

Cet article est très utile. Drag drop wpf

Ce code peut être utile pour vous aussi.

Point _startPoint; 
bool _IsDragging = false; 

void TemplateTreeView_PreviewMouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.LeftButton == MouseButtonState.Pressed || 
     e.RightButton == MouseButtonState.Pressed && !_IsDragging) 
    { 
     Point position = e.GetPosition(null); 
     if (Math.Abs(position.X - _startPoint.X) > 
       SystemParameters.MinimumHorizontalDragDistance || 
      Math.Abs(position.Y - _startPoint.Y) > 
       SystemParameters.MinimumVerticalDragDistance) 
     { 
      StartDrag(e); 
     } 
    }   
} 

void TemplateTreeView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    _startPoint = e.GetPosition(null); 
} 

private void StartDrag(MouseEventArgs e) 
{ 
    _IsDragging = true; 
    object temp = this.TemplateTreeView.SelectedItem; 
    DataObject data = null; 

    data = new DataObject("inadt", temp); 

    if (data != null) 
    { 
     DragDropEffects dde = DragDropEffects.Move; 
     if (e.RightButton == MouseButtonState.Pressed) 
     { 
      dde = DragDropEffects.All; 
     } 
     DragDropEffects de = DragDrop.DoDragDrop(this.TemplateTreeView, data, dde); 
    } 
    _IsDragging = false; 
} 
+0

Merci Erin le code a aidé à réaliser ce qui s'est mal passé. Dans mon MousePreviewDown était un couple de choses mal, comme le point où je n'ai pas utilisé Math.Abs ​​(). Désolé les commentaires sont arrivés si tard :) – don

+2

Est-ce que cela a résolu le problème? (La question devrait être marqué comme ayant ??) –

+0

il a résolu le problème pour moi – don

Questions connexes