2009-06-22 9 views
15

내 Treeview에서 파일을 드래그 앤 드롭하려고하지만 파일을 실행하고 파일을 드래그하면 왜 파손되는지 알 수 없습니다.Treeview의 드래그 앤 드롭

아래 코드는 제가 시도한 코드입니다. 도와주세요.

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

답변

42

이 문서는 매우 유용합니다. Drag drop wpf

이 코드는 여러분에게 유용 할 수 있습니다.

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

에린 감사합니다. 내 MousePreviewDown에서 몇 가지 잘못되었습니다. 내가 사용하지 않은 지점이 Math.Abs ​​()입니다. 죄송합니다 의견이 늦게 왔어요 :) – don

+2

그런 다음 문제를 해결 했나요? (질문에 답변으로 표시해야합니까 ??) –

+0

그것은 나를 위해 문제를 해결했습니다 – don