如何在WPF中查看拖放元素?
我有一个列表框和一个文档面板。列表框包含应该拖到停靠面板上的项目。我通过遵循这一点实现了这一点 但有几件事我不明白: 拖动时,我只看到一个光标。我想看看我的清单上的项目 拖动以使用光标四处移动。我该怎么做? DragDropEffect特性仅适用于不同的光标设计,还是具有 更高的目标 如何使列表项在放到列表框中后从列表框中消失 DockPanel? 我想在我拖动的项目上强制一些动画,比如辉光 下降。我应该使用哪个触发器/设置器? 以下是我的基本拖放代码: ListBox部分的代码隐藏如何在WPF中查看拖放元素?,wpf,drag-and-drop,Wpf,Drag And Drop,我有一个列表框和一个文档面板。列表框包含应该拖到停靠面板上的项目。我通过遵循这一点实现了这一点 但有几件事我不明白: 拖动时,我只看到一个光标。我想看看我的清单上的项目 拖动以使用光标四处移动。我该怎么做? DragDropEffect特性仅适用于不同的光标设计,还是具有 更高的目标 如何使列表项在放到列表框中后从列表框中消失 DockPanel? 我想在我拖动的项目上强制一些动画,比如辉光 下降。我应该使用哪个触发器/设置器? 以下是我的基本拖放代码: ListBox部分的代码隐藏 谢谢你的帮
谢谢你的帮助 好吧,过了一会儿,我找到了一些答案,自己发现了一些东西 对于DragDropEffect枚举,使用它有两个原因: 区分项目是在代码中移动还是复制。它就像一面旗帜,最常用的用法如下: 如果e.DragDropEffect==DragDropEffect.Move { ... } 否则 根据枚举值装饰鼠标光标。这样,它会告诉用户是否正在移动或复制项目
关于拖放可视化,这里有一个链接,链接到包含参考的帖子,这是拖放构建的一个很好的起点:好的,过了一会儿,我找到了一些答案,自己发现了一些东西 对于DragDropEffect枚举,使用它有两个原因: 区分项目是在代码中移动还是复制。它就像一面旗帜,最常用的用法如下: 如果e.DragDropEffect==DragDropEffect.Move { ... } 否则 根据枚举值装饰鼠标光标。这样,它会告诉用户是否正在移动或复制项目 关于拖放可视化,这里有一个指向包含参考的帖子的链接,这是拖放构建的一个很好的起点:
private Point startPosition;
private void ListBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
startPosition = e.GetPosition(null);
}
private void ListBox_PreviewMouseMove(object sender, MouseEventArgs e)
{
Point currentPosition;
Vector offset;
ListBox listBox;
ListBoxItem item;
Match match;
DataObject dragData;
currentPosition = e.GetPosition(null);
offset = startPosition - currentPosition;
if (e.LeftButton == MouseButtonState.Pressed &&
(Math.Abs(offset.X) > SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(offset.Y) > SystemParameters.MinimumVerticalDragDistance))
{
// Get the data binded to ListBoxItem object, which is "match"
listBox = sender as ListBox;
item = FindAnchestor<ListBoxItem>((DependencyObject)e.OriginalSource);
match = (Match)listBox.ItemContainerGenerator.ItemFromContainer(item);
dragData = new DataObject("match", match);
DragDrop.DoDragDrop(item, dragData, DragDropEffects.Move);
}
}
private void DockPanel_DragEnter(object sender, DragEventArgs e)
{
if (!e.Data.GetDataPresent("match") ||
sender == e.Source)
{
e.Effects = DragDropEffects.None;
}
}
private void DockPanel_Drop(object sender, DragEventArgs e)
{
Match match;
DockPanel matchSlot;
ContentPresenter contentPresenter;
Binding binding;
if (e.Data.GetDataPresent("match"))
{
match = e.Data.GetData("match") as Match;
matchSlot = sender as DockPanel;
contentPresenter = new ContentPresenter();
contentPresenter.ContentTemplate = this.FindResource("MatchTemplate") as DataTemplate;
binding = new Binding();
binding.Source = match;
contentPresenter.SetBinding(ContentPresenter.ContentProperty, binding);
matchSlot.Children.Clear();
matchSlot.Children.Add(contentPresenter);
}
}