如何正确允许在WPF中拖放?
所以我在WinForm大约一年之前就开始使用这个应用程序,并决定在WPF中重新创建它,以使它更多..最新我猜。 我刚刚遇到了我的第一个问题,允许拖放。 当我尝试拖放一个文件时,它不会工作,因为它给了我一个带有一条线的黑色圆圈。如何正确允许在WPF中拖放?
这是我到目前为止尝试过的。 设置AllowDrop = true。
测试测试在堆栈
几个解决方案,这其中 http://codeinreview.com/136/enabling-drag-and-drop-over-a-grid-in-wpf/
但我谷歌我无法多少找到答案,所以我要问的利弊。 把它放在我身上我做错了什么,我将如何以正确的方式做到这一点? 这是我到目前为止的代码
<Grid AllowDrop="True" Drop="Grid_Drop" DragOver="Grid_DragOver">
<TextBox Name="tbSomething" Text="stuff" Margin="181,140,183,152"></TextBox>
</Grid>
private void Grid_Drop(object sender, DragEventArgs e)
{
if (null != e.Data && e.Data.GetDataPresent(DataFormats.FileDrop))
{
var data = e.Data.GetData(DataFormats.FileDrop) as string[];
// handle the files here!
}
}
private void Grid_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effects = DragDropEffects.Copy;
}
else
{
e.Effects = DragDropEffects.None;
}
}
的问题是,文本框有它自己的拖放不支持FileDrop,这就是为什么你会得到Drag.None图标处理程序。
所以你需要把你的处理程序放在TextBox处理程序的前面。像这样...
<Grid>
<TextBox Name="tbSomething" Text="stuff" Margin="20" AllowDrop="True" PreviewDrop="Grid_Drop" PreviewDragOver="Grid_DragOver" ></TextBox>
</Grid>
预览处理程序在文本框处理程序之前被调用。
然后在处理程序...
private void Grid_Drop(object sender, DragEventArgs e)
{
if (null != e.Data && e.Data.GetDataPresent(DataFormats.FileDrop))
{
var data = e.Data.GetData(DataFormats.FileDrop) as string[];
e.Handled = true;
// handle the files here!
}
}
private void Grid_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effects = DragDropEffects.Copy;
e.Handled = true;
}
else
{
e.Effects = DragDropEffects.None;
}
}
注意e.Handled = true的语句!如果没有这些文本框处理程序将简单地覆盖您的工作。
我确定这在大部分情况下都能正常工作,但我仍然得到这个圈子。 –
看看XAML。我将处理程序从网格移至文本框。它适用于你的情况。我用你的代码! – AQuirky
...你尝试设置_breakpoint_吗? – MickyD