2013-06-27 36 views
1

我希望標題不是太混亂,不完全確定如何描述它。無論如何!如何獲得拖放放置目標對象?

我有一個treeview與hierarchicalDataTemplates,如下所示;

<TreeView.Resources> 

       <HierarchicalDataTemplate DataType="{x:Type WPFFM:AssetCategoryViewModel}" ItemsSource="{Binding Path= Children}" > 
       <StackPanel Orientation="Horizontal" AllowDrop="True" Drop="StackPanel_Drop" DragEnter="StackPanel_DragEnter"> 
       <TextBlock Text= "{Binding Description}" ContextMenu="{StaticResource assetOverviewContextMenu}"/> 
       </StackPanel> 
       </HierarchicalDataTemplate> 

       <HierarchicalDataTemplate DataType="{x:Type WPFFM:AssetViewModel}" ItemsSource="{Binding Children}" > 
       <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Name}" HorizontalAlignment="Stretch" ContextMenu="{StaticResource assetContextMenu}" 
                PreviewMouseLeftButtonDown="Asset_PreviewMouseLeftButtonDown" PreviewMouseMove="Asset_PreviewMouseMove" /> 
       </StackPanel> 
       </HierarchicalDataTemplate> 

</TreeView.Resources> 

我已經在類別標題上設置了AllowDrop爲true,並且我已經設置了一些在兩者之間拖動資產的處理。這是我的拖動代碼;

private void Asset_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     startPoint = e.GetPosition(null); 
    } 

    private void Asset_PreviewMouseMove(object sender, MouseEventArgs e) 
    { 
     // Get the current mouse position 
     Point mousePos = e.GetPosition(null); 
     Vector diff = startPoint - mousePos; 

     if (e.LeftButton == MouseButtonState.Pressed && 
      Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance || 
      Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance) 
     { 


      TextBlock parentMenu = sender as TextBlock; 
      AssetViewModel assetViewModelToSend = ((AssetViewModel)parentMenu.DataContext); 



      // Initialize the drag & drop operation 
      DataObject dragData = new DataObject("myFormat", assetViewModelToSend); 
      DragDrop.DoDragDrop(parentMenu, dragData, DragDropEffects.Move); 
     } 
    } 

並下降;

private void StackPanel_Drop(object sender, DragEventArgs e) 
    { 
     //TextBlock parentMenu = e as TextBlock; 
     //AssetCategoryViewModel assetCat = ((AssetCategoryViewModel)parentMenu.DataContext); 

     //MessageBox.Show(parentMenu.Text); 


     if (e.Data.GetDataPresent("myFormat")) 
     { 
      AssetViewModel modelBeingSent = e.Data.GetData("myFormat") as AssetViewModel; 
      MessageBox.Show(modelBeingSent.Description); 

     } 
    } 

    private void StackPanel_DragEnter(object sender, DragEventArgs e) 
    { 
     if (!e.Data.GetDataPresent("myFormat") || 
    sender == e.Source) 
     { 
      e.Effects = DragDropEffects.None; 
     } 
    } 

這工作得很好,我可以從dragEventArgs讓我的視圖模型和橫向拖動,但我需要找到,我是將它拖動到新的類別視圖模型,但你如何得到釋放目標數據?這可能是發件人或參數中的東西嗎?

編輯:爲了清楚起見,這裏是我的看法的圖片。拖動源將是孩子(筆記本電腦),放置目標將是類別(硬件等)。

asset overview

回答

2

在StackPanel_Drop方法中,e.OriginalSource對象應該是放置目標。你應該能夠從中獲得你需要的信息。

+0

工程就像一個魅力!誰會認爲這件事很簡單。 –

-1

條件是:

if ((e.LeftButton == MouseButtonState.Pressed && (
     Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance || 
     Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)) 

和MouseButtonState.Pressed和或用於其他兩個條件!