2013-04-11 2 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