Перетащите файлы в 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); } }