在WPF中更改鼠标拖动光标

时间:2013-04-11 09:04:37

标签: c# wpf mouse-cursor

在将文档从文件系统拖到我的表单时,我必须显示鼠标光标上拖动文件的数量。

我已完成以下代码,但我无法更改拖动光标。请告诉我最好的方法

    private void tbDisplayFileContents_PreviewDragOver(object sender, DragEventArgs args)
    {
       if (IsSingleFile(args) != null)
        {
              tbDisplayFileContents_PreviewDrop(sender, args);
        }
        else
        {
          //  args.Effects = DragDropEffects.None;
        }
        Mouse.SetCursor(Cursors.Hand);
        Icon ico = new Icon(string.Concat("1365516094_10371.ico"));
        tbDisplayFileContents.Cursor = GenerateCursor.CreateCursor(ico, true, new System.Drawing.Color());
        args.Handled = true;
    }

    private void tbDisplayFileContents_PreviewDrop(object sender, DragEventArgs args)
    {
        args.Handled = true;
        string files = string.Empty;
        string[] fileName = IsSingleFile(args);
        if (fileName == null) return;
        isDrag = true;
        DoEvents();
        for (int i = 0; i < fileName.Length; i++)
        {
            if (i == 0)
            {
                files = string.Concat("1] ", fileName[i]);
            }
            else
            {
                int j = i + 1;
                files = string.Concat(files, Environment.NewLine, j, "] ", fileName[i]);
            }
        }

        lblfileName.Content = files;
    }


    private string[] IsSingleFile(DragEventArgs args)
    {
        if (args.Data.GetDataPresent(DataFormats.FileDrop, true))
        {
            string[] fileNames = args.Data.GetData(DataFormats.FileDrop, true) as string[];
            if (fileNames.Length != 0)
            {
                if (File.Exists(fileNames[0]))
                {
                    // At this point we know there is a single file.
                    return fileNames;
                }
            }
        }
        return null;
    }
    #endregion

    #region -------Events--------
    private void btnClear_Click(object sender, RoutedEventArgs e)
    {
        lblfileName.Content = string.Empty;
    }

    #endregion
    private void tbDisplayFileContents_PreviewDragEnter(object sender, DragEventArgs e)
    {
        e.Effects = DragDropEffects.None;
    }
    public static void DoEvents()
    {
        Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,
                                              new Action(delegate
        {
            Icon ico = new Icon(string.Concat("1365516094_10371.ico"));
            Mouse.OverrideCursor = GenerateCursor.CreateCursor(ico, true, new System.Drawing.Color());
        }));
    }

我使用了GiveFeedBack事件如下

private void tbDisplayFileContents_GiveFeedback(object sender, GiveFeedbackEventArgs e)
        {
            if (e.Effects == DragDropEffects.Copy)
            {
                e.UseDefaultCursors = false;
               // Mouse.SetCursor(Cursors.Hand);

                Icon ico = new Icon(string.Concat("1365516094_10371.ico"));
                //Mouse.Cursor = GenerateCursor.CreateCursor(ico, true, new System.Drawing.Color());
                Mouse.SetCursor(GenerateCursor.CreateCursor(ico, true, new System.Drawing.Color()));
            }
            else
                e.UseDefaultCursors = true;

            e.Handled = true;
        }

它正在形成拖动的形式,但它不适用于从桌面拖出外部形式的内容(文件)。

1 个答案:

答案 0 :(得分:1)

我错过了代码中的GiveFeedback事件,该事件用于在拖放操作时修改鼠标光标。