我将我在WinForms中编写的应用程序转换为UWP,据我所知,Drag n Drop功能略有不同。这是我的WinForms应用程序中的代码,我过去常常使用它来拖动' object,是一个名为FunctionButton的控件;
private void flowLayoutPanel_ActiveGroup_DragDrop(object sender, DragEventArgs e)
{
Function_Button draggedItem;
/* Check if the dragged item is one of the allowed dragged item TYPES. */
draggedItem = (Function_Button)e.Data.GetData(type);
if (draggedItem != null)
{
//DO STUFF
}
}
我正在设置我自己的StringDataFormats,当我开始寻找我需要的信息时,我使用DataView.GetDataAsync()读取,但是如何才能直接访问UWP中拖动的UIElement对象?
答案 0 :(得分:1)
我不确定这是否是最佳方式,但它有效。
首先,您需要处理DragStarting
事件,并将UIElement
存储在DataPackage
属性公开的Data
内。 DataPackage
类型似乎非常依赖文件和文件格式,但幸运的是它有一个由属性Properties
公开的通用字典。
<local:YourElement CanDrag="True" DragStarting="dragStarting">
</local:YourElement>
private void dragStarting(UIElement sender, DragStartingEventArgs args)
{
args.Data.Properties.Add("anykeyworks", sender);
}
接下来,您将按如下方式处理Drop事件:
<local:YourOtherElement AllowDrop="True" DragOver="dragOver" Drop="drop">
</<local:YourOtherElement>
private void drop(object sender, DragEventArgs e)
{
UIElement element = e.DataView.Properties["anykeyworks"] as UIElement;
}
private void dragOver(object sender, DragEventArgs e)
{
e.AcceptedOperation = DataPackageOperation.Copy;
}
如果您没有实现DragOver处理程序,则不会触发Drop事件。
答案 1 :(得分:-1)
正如您所知,UWP中的拖放功能与WinForms中的拖放功能不同。在UWP应用中,我们拖放的不是UIElement,而是DataPackage。因此,我们无法直接访问拖动的UIElement
对象。
我不确定为什么要获取拖放的UIElement
对象。如果您想在放弃时进行一些检查,我认为您可以检查由DataPackageView class属性公开的DataView的内容。
有关UWP中拖放功能的详细信息,请参阅Drag and drop以及GitHub上的官方Drag and drop sample。