【问题标题】:Cant drag drop on a Canvas panel无法在画布面板上拖放
【发布时间】:2016-12-22 15:26:55
【问题描述】:

在 Windows 10 上编写第一个针对 UWP 和 .NET Core 的程序,并希望添加拖放功能以包含从文件夹中拖动的图像。由于我想让用户在目标面板上按照他们的需要排列放置的图像(以及缩略图),因此我选择了 Canvas 面板,但无法进行拖放操作。将图像文件拖到面板上只会显示红色圆圈图标(无拖放)。将面板类型更改为网格,一切正常。关于如何让 Canvas 面板合作的任何线索?

xaml

<GridView Grid.Row="1" x:Name="MainPanel" AllowDrop="True" DragEnter="MainPanel_DragEnter" Drop="MainPanel_Drop" >  

</GridView>

后面的代码

private void MainPanel_DragEnter(object sender, DragEventArgs e)
    {
        e.AcceptedOperation = DataPackageOperation.Copy;
        e.DragUIOverride.Caption = "drop to add image file to collection";
        e.DragUIOverride.IsCaptionVisible = true;
        e.DragUIOverride.IsContentVisible = true;
    }



private async void MainPanel_Drop(object sender, DragEventArgs e)
        {
            if (e.DataView.Contains(StandardDataFormats.StorageItems))
            {
                var items = await e.DataView.GetStorageItemsAsync();
                // etc.
            }

        }

当尝试使用 Canvas 面板时,xaml 使用关键字 Canvas 代替 GridView,并且省略了 Grid.row="1"。

【问题讨论】:

  • 有什么更新吗?我的回答解决了你的问题吗?
  • 是的——干得好。我没有设置关于这个问题的通知,错过了你有用的回复。同时(当然)我编写了一个解决方法。谢谢

标签: c# uwp .net-core windows-10-universal


【解决方案1】:

似乎某些 Panel 控件不设置BackgroundFill 属性会使某些事件无法工作。

确定元素在 UI 中是否以及在何处对鼠标、触摸和触控笔输入可见,称为命中测试。对于触摸动作以及作为触摸动作结果的交互特定或操作事件,元素必须是可见的命中测试才能成为事件源并触发与该动作关联的事件。否则,操作会通过元素传递到可视化树中可以与该输入交互的任何底层元素或父元素。

有关详细信息,请参阅Hit testing and input events

所以我们应该能够设置CanvasBackground 属性,以便可以触发DragEnterDrop 事件。

例如:

<Canvas Background="Transparent" Grid.Row="1" x:Name="MainPanel" AllowDrop="True" DragEnter="MainPanel_DragEnter" Drop="MainPanel_Drop">
</Canvas>

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    相关资源
    最近更新 更多