2009-06-22 34 views
15

Tôi đang cố gắng kéo và thả tệp trong ảnh treeview của mình nhưng tôi không biết tại sao nó lại bị hỏng nếu tôi chạy nó và thử kéo một tệp.Kéo và thả trong ảnh nhỏ

Mã bên dưới là những gì tôi đã thử. Hãy giúp tôi.

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; 
    } 
} 

Trả lời

42

Bài viết này rất hữu ích. Drag drop wpf

Mã này cũng có thể được sử dụng cho bạn.

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

Cảm ơn Erin mã đã giúp nhận ra điều gì đã xảy ra. Trong MousePreviewDown của tôi là một vài điều sai, giống như điểm mà tôi đã không sử dụng Math.Abs ​​(). Xin lỗi phản hồi đã đến trễ này :) – don

+2

Điều đó có khắc phục được sự cố không? (Nếu câu hỏi được đánh dấu là đã trả lời?) –

+0

nó giải quyết được vấn đề cho tôi – don