Перетащите файлы в 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 ответа:
Это в основном то, что вы хотите сделать.
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
до правда в aPreviewDragOver
обработчик событий.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); } }