Перетащите файлы в WPF


мне нужно удалить файл изображения в мое приложение WPF. В настоящее время у меня есть запуск события, когда я бросаю файлы, но я не знаю, что делать дальше. Как мне получить изображение? Это sender объект изображения или контроль?

private void ImagePanel_Drop(object sender, DragEventArgs e)
{
    //what next, dont know how to get the image object, can I get the file path here?
}
3 84

3 ответа:

Это в основном то, что вы хотите сделать.

private void ImagePanel_Drop(object sender, DragEventArgs e)
{

  if (e.Data.GetDataPresent(DataFormats.FileDrop))
  {
    // Note that you can have more than one file.
    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);

    // Assuming you have one file that you care about, pass it off to whatever
    // handling code you have defined.
    HandleFileOpen(files[0]);
  }
}

кроме того, не забудьте на самом деле подключить событие в XAML, а также установить .

<StackPanel Name="ImagePanel" Drop="ImagePanel_Drop" AllowDrop="true">
    ...
</StackPanel>

файл изображения содержится в e параметр, который является экземпляром DragEventArgs класс.
(Тег sender параметр содержит ссылку на объект, который вызвал событие.)

в частности, регистрация e.Data; как поясняется в документации, это возвращает ссылку на объект данных (IDataObject), который содержит данные из события перетаскивания.

The IDataObject интерфейс обеспечивает a количество методов для получения объекта данных, который вы ищете. Вы, вероятно, захотите начать с вызова GetFormats метод для того чтобы узнать формат данных, в котором вы работаете. (Например, это фактическое изображение или просто путь к файлу изображения?)

затем, как только вы определили формат перетаскиваемого файла, вы вызовете одну из конкретных перегрузок GetData метод для фактического извлечения объекта данных в конкретном формат.

кроме ответа А. Р. Обратите внимание, что если вы хотите использовать TextBox вы должны знать следующие вещи.

TextBox Кажется, уже есть некоторые обработки по умолчанию для DragAndDrop. Если ваш объект данных является String, это просто работает. Другие типы не обрабатываются и вы получаете запрещенный эффект мыши и ваш обработчик Drop никогда не вызывается.

похоже, вы можете включить свою собственную обработку с e.Handled до правда в a PreviewDragOver обработчик событий.

XAML

<TextBox AllowDrop="True"    x:Name="RtbInputFile"      HorizontalAlignment="Stretch"   HorizontalScrollBarVisibility="Visible"  VerticalScrollBarVisibility="Visible" />

C#

RtbInputFile.Drop += RtbInputFile_Drop;            
RtbInputFile.PreviewDragOver += RtbInputFile_PreviewDragOver;

private void RtbInputFile_PreviewDragOver(object sender, DragEventArgs e)
{
    e.Handled = true;
}

private void RtbInputFile_Drop(object sender, DragEventArgs e)
{
     if (e.Data.GetDataPresent(DataFormats.FileDrop))
     {
                // Note that you can have more than one file.
                string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                var file = files[0];                
                HandleFile(file);  
     }
}