Handling Drag-and-Drop Events for Macintosh


Drag-and-drop events in Silverlight have some differences depending on the platform. In particular, drag-and-drop input actions are reported differently on a Macintosh computer. Therefore, Silverlight-based applications that run on a Macintosh must use different techniques to process a drag-and-drop action. This topic describes specific techniques and workarounds for handling drag-and-drop events on a Macintosh in a Silverlight-based application.

To handle drag-and-drop events for applications hosted by Safari browser on the Macintosh, you must forward the relevant HTML DOM events to the specific handler in Silverlight. This is a requirement because the Safari plug-in model does not provide these events to plug-ins, such as Silverlight.

The following is an excerpt of the embed tag you would use in Safari to declare drag-and-drop event handlers for the HTML element that instantiates the Silverlight plug-in:

<embed id="AgControl1"

The following is an example of a JavaScript function named handleDragEnter that handles the HTML DOM dragEnter event in Safari. The getElementById call obtains the Silverlight plug-in instance. The event is forwarded to the Silverlight plug-in for processing.

function handleDragEnter(oEvent) {
  // Prevent default operations in DOM
  agControl = document.getElementById("AgControl1");
  var flag = agControl.dragEnter(oEvent);
    // If handled, then stop propagation of event in DOM
    if (flag) oEvent.stopPropagation();

You should write one handler for the following drag-and-drop-related HTML DOM events: dragEnter, dragLeave, dragOver, and drop. Each of the event handlers follow the same basic pattern as the handleDragEnter function. For example, you would change the name accordingly (line #1) and you would forward the event to the appropriate event handler in Silverlight (line #5). If necessary, you can add your own application-specific logic.

The Firefox browser for Mac OS X restricts object-level access to the drop event. Therefore, the forwarding technique described for Safari might not work for Firefox.

Community Additions