Wpf 如何显示允许阻力&;降低目标?

Wpf 如何显示允许阻力&;降低目标?,wpf,drag-and-drop,Wpf,Drag And Drop,我正在考虑UI设计(使用WPF),但我不确定如何实现一个关键特性:用户将为资源分配需求。关于可以进行哪些分配,有一些规则,例如兼容性和可用性。我想显示一个资源列表和一个需求列表。用户可以通过将需求拖放到资源上来进行分配 我想做的是,通过突出显示给定需求的所有可分配资源,向用户显示可以进行哪些可能的分配。这应该在拖动任何给定的需求时完成 (我可以在XAML中使用资源ViewModels和触发器上的属性执行高亮显示,并执行拖放操作。) 我没有看到任何拖动开始或停止的通用事件;它们要么与源元素相关,要

我正在考虑UI设计(使用WPF),但我不确定如何实现一个关键特性:用户将为资源分配需求。关于可以进行哪些分配,有一些规则,例如兼容性和可用性。我想显示一个资源列表和一个需求列表。用户可以通过将需求拖放到资源上来进行分配

我想做的是,通过突出显示给定需求的所有可分配资源,向用户显示可以进行哪些可能的分配。这应该在拖动任何给定的需求时完成

(我可以在XAML中使用资源ViewModels和触发器上的属性执行高亮显示,并执行拖放操作。)

我没有看到任何拖动开始或停止的通用事件;它们要么与源元素相关,要么与被主动拖拽的元素相关。当开始拖动时,如何评估方法以评估每个资源项的兼容性

编辑:

随着我对这一点的深入思考,在选择项目时执行突出显示功能可能比开始拖动更好。由于项目通常位于ListView或TreeView中,因此拖动也会导致项目被选中。此外,用户在考虑其选择时不必启动并按住拖动。由于目标列表可能很长,用户可能需要滚动以找到他们想要的目标,这在拖动时是不实际的


我可以很容易地监听SelectionChanged事件,以评估潜在的拖放目标。

在WPF中,拖放服务定义良好,并指出其适用性,这些服务是有效的可拖放和可拖放视觉效果,用于拖动数据

编辑

根据您的要求,拖动开始时,您需要指示\突出显示\聚焦有效的可拖放目标

为此,可拖放的可视对象必须为正在被拖动的数据类型注册自己。因此,当所有投放目标的注册数据被拖动时,即在
DragDrop.DoDragDrop(…,…)
调用中,所有投放目标都将得到通知

现在这很棘手,但是您可以使用来保存拖动的数据。将已注册的目标视觉效果数据添加到剪贴板时,该剪贴板服务将通知已注册的目标视觉效果。您可以使用一个命令
CanExecute()
,该命令在拖放视图上不断执行,并检查剪贴板数据是否为已注册的数据类型。如果是这样,它会将针对所有有效放置目标附加的基于视图模型的布尔属性设置为true,这将通过附加的行为突出显示它们

在后退(拖放丢失)的情况下,必须清除剪贴板


当然,这说起来容易做起来难。。。。但是值得一试。

虽然我计划采用另一种用户界面方法(选择时突出显示),但我仍然在思考我认为WPF拖放服务存在的缺点


突然,我意识到拖动的开始调用了我的代码,以便得到被拖动的数据。我可以在那里做任何我想做的事情,包括触发任何额外的UI效果!有了这个,在DragDrop类中期望这样的功能似乎有点愚蠢…

也许我遗漏了一些东西,但我不知道如何使用它来达到我所期望的效果。这些似乎仅适用于开始拖动的图元,或已进入拖动的图元。我当然可以用它来表示是否允许用户将鼠标放在现在的位置。我想指出用户可能选择将鼠标移动到的多个元素。当鼠标不在给定元素中时,可以使用哪些DragDrop成员?您是说要在拖动开始后显示\突出显示\装饰有效的目标可拖放视觉效果?是的。一旦开始拖动,我想评估所有可能的拖放目标,并直观地指示可以拖放哪些目标(复数),而不必在每个元素上拖动。我理解的方法只能指示用户是否可以将鼠标放在当前位置,可能需要用户“测试”多个位置。我不太清楚“注册”是什么意思。我在WPF DragDrop或Clipboard类中没有看到任何对此类的引用。我确实看到了一些其他与WinForms相关的函数,但这似乎是一个窗口级别的功能,可以在应用程序之间进行复制或拖动,不适用于WPF元素或非UI对象,例如ViewModel。