2013-04-11 101 views
1

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

我已经完成了以下代码,但是我无法更改拖动光标。请让我知道要做到这一点

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

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

+0

仍然无法正常工作... – Pravin 2013-04-20 10:31:07