In the article, "Very simple WPF Drag and Drop Sample without Win32 Calls", I stated that because of not using Win32 calls, the resulting code should also work in the browser under partial trust. Well... I was wrong. It turned out that
DragDrop.DoDragDrop(...) function would throw a
SecurityException in an XBAP application under partial trust since
DragDrop.DoDragDrop originates a so called OLE Drag'n Drop operation. For most applications, when we are dragging and dropping only WPF objects, no OLE transfer is necessary. So in this article, I give an example of simulating the Drag'n Drop functionality without
DragDrop.DoDragDrop method that runs in a browser.
Using the Code
To use the code, simply unzip the file, start the project, compile and run the application.
There are two interesting things I had to figure out in order to make the application work in a browser: making sure that the picture of the cursor is visible and adopts a shape that we want. Both are implemented in
ListView1_MouseMove callback for
To make the cursor visible, we simply do:
There is a problem that remains, however: I wanted the cursor to become a rectangle and there were no rectangle shapes among
Cursors enumeration. And to top it all, you cannot use a bitmap image for a cursor in an XBAP partial trust application. To get around this problem, I made the cursor to be a semi-transparent rectangle visible only for the duration of the drag operation:
The following code ensures that the cursor rectangle does not move outside of the
ListView control boundaries:
Point p = e.GetPosition(ListView1);
Rect bounds = VisualTreeHelper.GetDescendantBounds(ListView1);
if ( (bounds.Top < p.Y) && (bounds.Bottom > p.Y))
if ((bounds.Left < p.X) && (bounds.Right > p.X))
The rest of the code is very similar to that of "Very simple WPF Drag and Drop Sample without Win32 Calls" article.
- 16th March, 2008: Initial post