如何使用C#检测URL从浏览器拖动到WPF文本框中

时间:2019-02-21 18:07:49

标签: c# wpf xaml drag-and-drop

我有一个用C#编写的WPF项目,旨在在Windows 10上运行。我希望能够将URL从浏览器拖放到WPF TextBox中,并检测何时将URL拖放到WPF TextBox中。

我已经能够通过文件资源管理器对文件执行此操作,但是我用于文件的相同拖放事件无法用于从浏览器中删除URL。当我释放拖动按钮时,URL文本被复制到WPF文本框中,但是当发生与拖放活动有关的事件时,我没有引发任何事件,就像我拖放被拖动文件时一样。

以下是我用于从文件资源管理器检测文件拖放的WPF事件,但未获得用于从浏览器删除URL的拖动事件:

   private void InfoTextBox_DragOver(object sender, System.Windows.DragEventArgs e)
    {
      if (e.Data.GetDataPresent(System.Windows.DataFormats.FileDrop))
        e.Effects = System.Windows.DragDropEffects.Copy;
      else
        e.Effects = System.Windows.DragDropEffects.None;

      e.Handled = true;
    }

    private void InfoTextBox_DragEnter(object sender, System.Windows.DragEventArgs e)
    {
      if (e.Data.GetDataPresent(System.Windows.DataFormats.FileDrop))
        e.Effects = System.Windows.DragDropEffects.Copy;
      else
        e.Effects = System.Windows.DragDropEffects.None;

      e.Handled = true;
    }

    private void InfoTextBox_Drop(object sender, System.Windows.DragEventArgs e)
    {
      string[] filenames = (string[])e.Data.GetData(System.Windows.DataFormats.FileDrop);


      InfoTextBox.Text = File.ReadAllText(filenames[0]);
    }

以下是文本框的XAML:

<TextBox x:Name="InfoTextBox" Grid.Column="1" Grid.ColumnSpan="3" 
         Grid.Row="5" Grid.RowSpan="7" 
         AllowDrop="True" PreviewDragOver="InfoTextBox_PreviewDragOver" 
         DragEnter="InfoTextBox_DragEnter" Drop="InfoTextBox_Drop"
         HorizontalAlignment="Stretch" Margin="5,0,-8,80" BorderBrush="PowderBlue"
         BorderThickness="1" VerticalScrollBarVisibility="Auto" 
         TextWrapping="Wrap" AcceptsReturn="True" 
         Text="" VerticalAlignment="Stretch" DragOver="InfoTextBox_DragOver"   />

我可以在WPF应用程序中添加什么,以便当我将URL从浏览器拖放到InfoTextBox时触发一个事件?我正在获取TextChanged事件,但这不是特定于拖放操作的事件,因为仅当有人在框中键入内容时,它也可以触发。作为最后的努力,我可以使用TextChanged事件,但想知道是否可以使用拖放操作完成该操作。

谢谢。

0 个答案:

没有答案