Как разрешить перетаскивание из Windows Explorer в приложение WPF С#?
Я знаю, что на эту тему было много ответов, но я до сих пор не могу заставить его работать вообще. Я включил AllowDrop для каждого элемента управления на всех уровнях приложения и попытался поймать DragEnter и Drop на каждом элементе управления безрезультатно. Я могу перетаскивать элементы внутри приложения, но в любое время, когда я пытаюсь что-то принести из проводника Windows или рабочего стола и т.д., Он дает мне значок "Нет". Любые идеи, что я могу делать неправильно?
Вот пример того, что я делаю. Все еще не отображает курсор перемещения и не попадает в функцию MainWindow_DragEnter.
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.AllowDrop = true;
this.DragEnter += new DragEventHandler(MainWindow_DragEnter);
}
void MainWindow_DragEnter(object sender, DragEventArgs e)
{
e.Effects = DragDropEffects.Move;
}
}
}
Ответы
Ответ 1
AllowDrop только активирует возможность использования перетаскивания.
Вы должны справиться с этим сами.
Как вы видели, объекты, имеющие AllowDrop, также имеют события DragEnter, DragOver, DragLeave.
Вы должны закодировать то, что хотите, в этот момент.
Вы можете изменить курсор, принять выпавшие предметы и т.д.
Но вы должны сделать это самостоятельно. Например. найдите DragEventArgs.Effects.
Я только что открыл новое приложение WPF, выбранное окно, включил AllowDrop, добавил обработчик событий DragEnter и добавил туда: e.Effects = DragDropEffects.Move;
Прекрасно работает для меня.
Ответ 2
Я решил свою проблему, я верю. Я запускал Visual Studio в качестве администратора. Когда он запустил мое приложение, он не распознал перетаскивания из Explorer, потому что Explorer работал в режиме пользователя. Надеюсь, что это движение костину поможет кому-то еще.