Возможно ли, чтобы окно / элемент WPF обнаруживали перетаскивание файла из проводника Windows в С # .Net 3.5? Я нашел решения для WinForms, но не для WPF.
Обнаружить файл Drag'n'Drop в WPF?
Ответы (4)
К сожалению, средства просмотра TextBox, RichTextBox и FlowDocument всегда помечают события перетаскивания как обработанные, что предотвращает их переход к вашим обработчикам. Вы можете восстановить события перетаскивания, перехваченные этими элементами управления, принудительно обработав события перетаскивания (используйте UIElement.AddHandler и установите для handledEventsToo значение true) и установив для e.Handled значение false в вашем обработчике.
Попробуйте следующее:
private void MessageTextBox_Drop(object sender, DragEventArgs e)
{
if (e.Data is DataObject && ((DataObject)e.Data).ContainsFileDropList())
{
foreach (string filePath in ((DataObject)e.Data).GetFileDropList())
{
// Processing here
}
}
}
private void MessageTextBox_PreviewDragEnter(object sender, DragEventArgs e)
{
var dropPossible = e.Data != null && ((DataObject)e.Data).ContainsFileDropList();
if (dropPossible)
{
e.Effects = DragDropEffects.Copy;
}
}
private void MessageTextBox_PreviewDragOver(object sender, DragEventArgs e)
{
e.Handled = true;
}
Оказывается, я не мог по какой-то причине зайти в TextBox, но падение на кнопки работает нормально. Он заработал, добавив 'AllowDrop = "True"' в мое окно и добавив обработчик события перетаскивания к кнопке, состоящей из:
private void btnFindType_Drop(object sender, DragEventArgs e)
{
if (e.Data is System.Windows.DataObject &&
((System.Windows.DataObject)e.Data).ContainsFileDropList())
{
foreach (string filePath in ((System.Windows.DataObject)e.Data).GetFileDropList())
{
// Processing here
}
}
}
У меня была аналогичная проблема: события перетаскивания и перетаскивания не запускались. Проблема была в настройках учетной записи пользователя Windows. Установите наименее безопасную настройку и попробуйте тот же код, который работает.