WPF 容器控件拖入时显示“不允许拖放”光标

在winform中,想要将外部文件拖入软件窗体内,只需在控件里实现三个方法,并设置该控件的AllowDrop属性值为true即可

string filepath;//拖入文件的路径
bool hasDropedData;//用于判断是否已拖入

private void groupBox1_DragDrop(object sender, DragEventArgs e)
{
    string[] FileArray = (string[])e.Data.GetData(DataFormats.FileDrop);//获取拖入的文件(夹)名
    filepath= FileArray[0];//保存拖入文件路径
}

private void groupBox1_DragEnter(object sender, DragEventArgs e)
{
    string[] FileArray = { };
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = DragDropEffects.All;//更改鼠标显示
        FileArray = (string[])e.Data.GetData(DataFormats.FileDrop);//获取拖入的文件(夹)名
    }
    else
    {
        e.Effect = DragDropEffects.None;
    }
    label1.Text = FileArray[0];//在label里显示拖入的文件绝对路径
}

private void groupBox1_DragLeave(object sender, EventArgs e)
{
    if (hasDropedData)
    {
        label11.Text = formexcel;
        return;
    }
    label1.Text = string.Empty;
}

但在WPF里,向容器控件(如Grid,GroupBox等)中添加上述事件后,将文件拖入控件内,会发现空白处会显示禁止拖放的鼠标光标,只有拖入到子控件上方,才会显示正在拖入的鼠标光标。(TextBox除外,因为WPF的TextBox对拖放事件处理机制的不同)

解决方案很简单:为该容器控件添加一个背景即可。

在下面的代码里,我添加了一个透明背景Background="Transparent"

    <Grid AllowDrop="True" Background="Transparent" DragOver="Grid1_DragOver" DragDrop="Grid1_DragDrop" DragLeave="Grid1_DragLeave">

现在再尝试将文件拖入Grid,会发现程序将正常显示正在拖入的鼠标光标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值