是否可以让 WPF 窗口/元素检测从 C# .Net 3.5 中的 Windows 资源管理器拖放文件?我找到了 WinForms 的解决方案,但没有找到 WPF 的解决方案。
NoizWaves
问问题
15242 次
4 回答
9
尝试以下操作:
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;
}
于 2011-04-22T12:14:55.723 回答
6
不幸的是,TextBox、RichTextBox 和 FlowDocument 查看器总是将拖放事件标记为已处理,这会阻止它们冒泡到您的处理程序。您可以通过强制处理拖放事件(使用 UIElement.AddHandler 并将handledEventsToo 设置为true)并在处理程序中将e.Handled 设置为false 来恢复被这些控件拦截的拖放事件。
于 2008-12-03T05:14:57.063 回答
3
事实证明,由于某种原因,我无法放到我的 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
}
}
}
于 2008-12-02T03:02:18.297 回答
0
我有类似的问题,放置事件和拖动输入事件没有被触发。问题出在 Windows 用户帐户设置上。将其设置为最不安全的设置并尝试使用相同的代码。
于 2012-03-22T08:34:45.293 回答