title: Change the mouse drag cursor in WPF
body: <p>I have to disply the number of dragged files count on mouse cursor while dragging document from file system to my form.</p>
  
  <p>I have done the following code, but I can not change the drag cursor. Please let me know the best way to do this</p>
  
  <pre><code>    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 &lt; 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());
          }));
      }
  </code></pre>
  
  <p>I have used GiveFeedBack event as follows</p>
  
  <pre>
  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;
          }
  </pre>
  
  <p>It is working for form to form dragging but it is not working for the contents(file) which is dragged from outside form e.g files from Desktop.</p>