我正在考虑使用UI设计(使用WPF),但我不确定如何实现关键功能:用户将分配对资源的需求。有关可以进行哪些分配的规则,例如兼容性和可用性。我想显示一个资源列表和一个需求列表。用户可以通过拖动需要并将其放到资源上来进行分配。
我想要做的是通过突出显示给定需求的所有可分配资源,向用户显示可以进行的分配。这应该在拖动任何给定的需求时完成。
(我很乐意使用资源ViewModels上的属性和XAML中的触发器执行突出显示,并执行拖放操作。)
我没有看到拖动开始或停止的任何通用事件;它们要么与源元素相关,要么与正在被拖动的元素相关。在启动拖动时,如何评估评估每个资源项的兼容性的方法?
编辑:
当我更多地考虑这个问题时,最好在选择项目时执行突出显示功能,而不是开始拖动。由于项目通常位于ListViews或TreeViews中,因此拖动也会导致项目被选中。另外,用户在考虑他们的选择时不必启动和保持阻力。由于目标列表可能很长,用户可能需要滚动才能找到他们想要的内容,这在拖动时是不切实际的。
我可以轻松收听SelectionChanged事件来评估潜在的丢弃目标。
答案 0 :(得分:0)
在WPF中,拖放服务定义明确,并指示其适用性是拖动数据的有效可拖动和可放置视觉效果。
http://msdn.microsoft.com/en-us/library/ms742859.aspx
修改强>
根据您的要求,您需要在拖动开始时指示\ highlight \ focus有效可放置目标。
为此,可放置的视觉效果必须注册自己以获取被拖动的数据类型。因此,当他们注册的此类数据被拖拽时,即DragDrop.DoDragDrop(..., <dragged data>, ...)
次呼叫时,所有丢弃目标都将被通知。
现在这很棘手,但您可以使用Clipboard services
来保存拖动的数据。当这些数据被添加到剪贴板时,相同的剪贴板服务将通知注册的目标视觉效果。您可以拥有一个在拖放视图上不断执行的命令CanExecute()
,并检查剪贴板数据是否为已注册的数据类型。如果是这样,它将设置一些基于视图模型的布尔属性,该属性已经针对所有那些有效的放置目标附加到true,这将通过附加行为突出显示它们。
如果退回(拖放丢失),则必须清除剪贴板。
但是当然这说起来容易做起来......但值得一试。
答案 1 :(得分:0)
虽然我已经更新了这个问题,我计划采用另一种UI方法(在选择时突出显示),但我仍然在思考我认为WPF Drag&amp; amp;中的一个缺点。放弃服务。
突然我意识到拖动的开始会调用我的代码以便拖动数据。我可以做任何我想要的事情,包括触发任何额外的UI效果!有了这个,在DragDrop类中期待这样的功能似乎有点傻了......