When implementing a drag-and-drop target in WPF, don’t forget to set AllowDrop to true! You wouldn’t think it would be that hard to remember - after all, it usually doesn’t work until you set it. However, I just tracked down a bug that resulted from AllowDrop not being set to true on a drag-and-drop target. In most circumstances, it was inheriting a true AllowDrop from an ancestor element, so it worked fine, but in other circumstances, one of its ancestors was setting AllowDrop to false for some reason. I really don’t understand why, and I’m guessing there’s a WPF bug hiding in there somewhere, but the fix was easy - always set AllowDrop to true if you want to handle the drag-and-drop target events (DragEnter, DragOver, Drop, etc.).
Incidentally, this was my first bug fix for which the .NET Framework Library Source Code proved invaluable. The ability to step through the code, set breakpoints, watch variables, etc. was key to tracking this one down.
Posted by Ed Ball on March 25, 2008