多个控件上的 C# WPF DragDrop 事件
C# WPF DragDrop event on multiple controls
您好,我有一个 WPF window、3 个不同的 DataGrid 和一个树视图。我的目标是 drag/drop 树视图中的一个项目到特定的数据网格中。我有 drag/drop 的工作代码并且它的工作完美无缺,但我的问题是我不知道如何 link 事件到其他数据视图。因此,在 'Drop' 事件中,我更改了我的第一个数据视图的内容,但我想更改我实际放置项目的数据视图的内容。
这是我的代码:
对于 xaml 中的每个 DataGrid:
Drop="Droptree_Drop" DragEnter="Droptree_DragEnter" AllowDrop="True"
我的 Treeview PreviewMouseMove 事件:
private void TvDates_PreviewMouseMove(object sender, MouseEventArgs e)
{
try
{
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))
{
//
TreeView tree = sender as TreeView;
TreeViewItem tvitem = FindAnchestor<TreeViewItem>((DependencyObject)e.OriginalSource);
// Initialize the drag & drop operation
DataObject dragData = new DataObject("myFormat", tvDates.SelectedItem.ToString());
DragDrop.DoDragDrop(tvitem, dragData, DragDropEffects.Move);
}
}
catch (Exception)
{
}
}
Droptree_DragEnter 事件:
private void Droptree_DragEnter(object sender, DragEventArgs e)
{
if (!e.Data.GetDataPresent("myFormat") ||
sender == e.Source)
{
e.Effects = DragDropEffects.None;
}
}
最后是我的掉落事件:
private void Droptree_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("myFormat"))
{
// MessageBox.Show(e.Data.GetData("myFormat") as string); Get Item content
List<string> currentitems = new List<string>();
foreach (dynamic item in dgChauffeur1.Items)
{
currentitems.Add(item.Orders.ToString());
}
currentitems.Add(e.Data.GetData("myFormat") as string);
dgChauffeur1.ItemsSource = currentitems.Select(s => new { Orders = s }).ToList(); //This is where i have my DataGrid however i want to have the datagrid i dropped my item on.
}
}
将这段代码添加到事件中修复了它:
DataGrid dg = sender as DataGrid;
dg.ItemsSource = ....
您好,我有一个 WPF window、3 个不同的 DataGrid 和一个树视图。我的目标是 drag/drop 树视图中的一个项目到特定的数据网格中。我有 drag/drop 的工作代码并且它的工作完美无缺,但我的问题是我不知道如何 link 事件到其他数据视图。因此,在 'Drop' 事件中,我更改了我的第一个数据视图的内容,但我想更改我实际放置项目的数据视图的内容。
这是我的代码:
对于 xaml 中的每个 DataGrid:
Drop="Droptree_Drop" DragEnter="Droptree_DragEnter" AllowDrop="True"
我的 Treeview PreviewMouseMove 事件:
private void TvDates_PreviewMouseMove(object sender, MouseEventArgs e)
{
try
{
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))
{
//
TreeView tree = sender as TreeView;
TreeViewItem tvitem = FindAnchestor<TreeViewItem>((DependencyObject)e.OriginalSource);
// Initialize the drag & drop operation
DataObject dragData = new DataObject("myFormat", tvDates.SelectedItem.ToString());
DragDrop.DoDragDrop(tvitem, dragData, DragDropEffects.Move);
}
}
catch (Exception)
{
}
}
Droptree_DragEnter 事件:
private void Droptree_DragEnter(object sender, DragEventArgs e)
{
if (!e.Data.GetDataPresent("myFormat") ||
sender == e.Source)
{
e.Effects = DragDropEffects.None;
}
}
最后是我的掉落事件:
private void Droptree_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("myFormat"))
{
// MessageBox.Show(e.Data.GetData("myFormat") as string); Get Item content
List<string> currentitems = new List<string>();
foreach (dynamic item in dgChauffeur1.Items)
{
currentitems.Add(item.Orders.ToString());
}
currentitems.Add(e.Data.GetData("myFormat") as string);
dgChauffeur1.ItemsSource = currentitems.Select(s => new { Orders = s }).ToList(); //This is where i have my DataGrid however i want to have the datagrid i dropped my item on.
}
}
将这段代码添加到事件中修复了它:
DataGrid dg = sender as DataGrid;
dg.ItemsSource = ....