2009-06-22 87 views
15

我試圖在我的樹視圖中拖放文件,但我不知道爲什麼它會崩潰,如果我運行它並嘗試拖動文件。在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

感謝Erin的代碼確實幫助我們意識到出了什麼問題。在我的MousePreviewDown中出現了一些錯誤的事情,比如我沒有使用Math.Abs​​()的地方。對不起,這個遲到的反饋來了:) – don 2009-08-12 08:33:36