我希望標題不是太混亂,不完全確定如何描述它。無論如何!如何獲得拖放放置目標對象?
我有一個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讓我的視圖模型和橫向拖動,但我需要找到,我是將它拖動到新的類別視圖模型,但你如何得到釋放目標數據?這可能是發件人或參數中的東西嗎?
編輯:爲了清楚起見,這裏是我的看法的圖片。拖動源將是孩子(筆記本電腦),放置目標將是類別(硬件等)。
工程就像一個魅力!誰會認爲這件事很簡單。 –