删除WPF TextBox中的文件

时间:2014-07-30 17:09:58

标签: wpf xaml drag-and-drop

我在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#代码,因为没有遇到任何断点。它根本不起作用。正如我所提到的,我确实尝试手动添加处理程序,但仍然无法使其正常工作。

3 个答案:

答案 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项目)。