我在Google和Stack Overflow上发现了很多次这个问题。这些解决方案都不起作用。
我有一个TextBox。 AllowDrop设置为true。我首先尝试了DragEnter / DragOver / Drop事件,然后切换到" Preview"所有这些事件。无论我做什么,都没有事件被调用。接下来我尝试在InitializeComponent()之后添加处理程序。没有运气。
Xaml - 注释掉了因为我不能发布它:
<TextBox PreviewDragEnter="OutputFolder_DragEnter" PreviewDragOver="OutputFolder_DragOver" AllowDrop="True" PreviewDrop="OutputFolder_Drop" />
没有发布C#代码,因为没有遇到任何断点。它根本不起作用。正如我所提到的,我确实尝试手动添加处理程序,但仍然无法使其正常工作。
答案 0 :(得分:2)
订阅PreviewDragHandler并设置e.Handled = true。然后Drop事件应该触发。
private void TextBox_PreviewDragOver(object sender, DragEventArgs e)
{
e.Handled = true;
}
XAML如下所示,
<TextBox VerticalAlignment="Center" AllowDrop="True"
PreviewDragOver="TextBox_PreviewDragOver"/>
答案 1 :(得分:1)
如果在WPF应用程序内部开始拖动,则仅会引发IIRC拖动事件。你想要的是Drop事件。本规范适用于我。
C#:
private void ListBox_Drop(object sender, DragEventArgs e)
{
var fileNames = (string[]) e.Data.GetData(DataFormats.FileDrop);
if (fileNames == null) return;
var fileName = fileNames.FirstOrDefault();
if (fileName == null) return;
(sender as ListBox).Items.Add(fileName);
}
XAML:
<ListBox AllowDrop="True" Drop="ListBox_Drop" />
答案 2 :(得分:0)
当出现此问题时,您是否以管理员身份运行Visual Studio?如果以升级的权限启动,Windows / UAC通常会阻止正在运行的程序外部执行拖放操作(特别是如果您使用的是不是域管理员的用户帐户)。
这是我经常遇到的一个问题,在我记得以非管理员身份重新启动Visual Studio之前很久就会对我造成错误(N.B.此问题适用于WPF和WinForms项目)。