【问题标题】:C# UWP - How to get an object's drag image?C# UWP - 如何获取对象的拖动图像?
【发布时间】:2018-12-23 04:17:32
【问题描述】:

如何为我在应用程序中拖动的项目获取拖动图像的副本?

DragStarting 事件包含一个 DragStartingEventArgs 对象,该对象包含一个 DragUI 对象,其描述是“正在拖动的数据的可视化表示。”理想情况下,我想在 DragStarting 事件中做这样的事情:

    private void OnDragStarting( UIElement sender, DragStartingEventArgs args )
    {
        // Create a new bitmap image object
        var dragImage = new BitmapImage();

        // Assign the drag image to the new bitmap image object
        dragImage = args.DragUI. ????
    }

但是,似乎没有办法从 DragUI 对象中获取拖动图像。 DragUI 仅包含“Set*”方法,没有“Get*”方法。

有没有办法在拖动操作开始时获取拖动图像?

【问题讨论】:

  • 如果你能提供一个minimal reproducible example就太好了
  • 你想完成什么?在 DragStarting 期间尚未设置任何图像。应用程序可以在那时进行设置。因此只有 Set 方法,没有 Get。请说明情况。
  • 拖拽源是第三方控件,拖拽图片按预期创建和显示。我没有事先访问它的拖动图像。拖动目标是一个图表控件,需要您使用拖动图像填充“容器”,以便在拖动图表“画布”时显示图像。如果您不填充此容器,则拖动图像在图表上方时不会出现。我只是想让源代码控件的拖动图像传递给图表控件的“容器”,以便图表在拖动其“画布”时显示拖动图像。

标签: c# uwp drag-and-drop


【解决方案1】:

您可以使用DataView.GetStorageItemsAsync() 接收您拖入应用程序的项目。

<Grid AllowDrop="True" DragOver="Image_drop_drag_over_ui" Drop="image_drop"/>

//C#代码

public async void Image_Drop(object sender, DragEventArgs e)
{
     if (e.DataView.Contains(StandardDataFormats.StorageItems))
     {
        List<StorageFile> received_images = new List<StorageFile>();
        var items = await e.DataView.GetStorageItemsAsync();
        var storageFile = items[0] as StorageFile;
        received_images.Add(storageFile);
     }
}
private void Image_drop_drag_over_ui(object sender, DragEventArgs e)
{
     e.AcceptedOperation = DataPackageOperation.Copy;
     e.DragUIOverride.Caption = "Drop receipt";
     e.DragUIOverride.IsCaptionVisible = true; 
}

【讨论】:

  • 很遗憾,我没有提供数据包,我对拖动操作中出现的图像没有先验知识,并且Drop事件来不及检索拖动图像-我需要在拖动开始后尽快检索拖动图像。 (请参阅我在上面的评论中对场景的详细解释。)
猜你喜欢
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 2023-03-03
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多