我目前正在编写一个工具,通过拖放操作将实体从一个{{1}}分配到另一个DataGrid
中的实体。
通过一些摆弄,我得到了一切顺利运行,只有一个小烦恼:有些实体无法分配给其他实体,但尚未反映UI(尚未)。
因此,我想要实现的行为如下:当用户将受让人拖过另一个实体时,如果实体不兼容,则图标应更改为“您不能放弃此处”图标。
这是我的代码(附加到目标DataGrid
的{{1}}事件):
DataGridDragDropTarget.DragOver
到目前为止我尝试过:
我已将DataGrid
,private void DragDropTarget_OnDragOver(object sender, Microsoft.Windows.DragEventArgs e)
{
var sw = sender as DataGridDragDropTarget;
if (sw == null)
{
return;
}
if(GetAssignmentCondition(e))
{
// TODO: Show link-icon
}
else
{
// TODO: Show drop-disabled-icon
}
}
的{{1}}属性和基础e.Effects
的{{1}}和DragDropTarget
设置为{ {1}},无济于事。谷歌搜索也没有产生任何有意义的结果,我没有想法。
答案 0 :(得分:2)
这适用于TextBox
和FlowDocument
控件的情况,因此它应与DataGrid
一起使用。
此处的关键是将事件设置为Handled
,以防止控件执行其恶作剧。
像这样:
代码背后(仅用于演示 - 最好使用更多MVVM友好的解决方案):
private void DragDropTarget_DragEnter(object sender, Microsoft.Windows.DragEventArgs e)
{
var sw = sender as DataGridDragDropTarget;
if (sw == null)
{
return;
}
if(GetAssignmentCondition(e))
{
// TODO: Show link-icon
e.Effects = DragDropEffects.Link;
}
else
{
// TODO: Show drop-disabled-icon
e.Effects = DragDropEffects.None;
}
// Add this
e.Handled = true;
}
答案 1 :(得分:1)
更改Effects
事件处理程序中DragEventArgs
的{{1}}属性而不将OnDragOver
属性设置为'true'不起作用,因为您可以在此处看到DragDropTarget.cs源代码。如果未在任何事件处理程序中处理Handled
(OnDragOver
),则args.Handled=true;
将恢复为args.Effects
。
args.AllowedEffects