DragAndDrop - A little unclear about e.Handled, cancelling a drag, and e.AllowedEffects?

2 posts, 0 answers
  1. Rob
    Rob avatar
    238 posts
    Member since:
    Jan 2009

    Posted 20 Dec 2013 Link to this post

    I have three listboxes where I can drag and drop items back and forth.

    Depending on some arbitrary logic, I want to disallow some drops.  For example, let's say the lists contain integers and I want to disallow dropping "even" integers onto one of the lists.

    I have attached the following events to the listboxes: OnDragInitialize, OnDragOver, OnDrop, and OnDragDropCompleted with handledEventsToo set to True.

    -Inside OnDragInitialize I fill my payload object, create a dragvisual, and set e.AllowedEffects = "All".  Do I need to set e.Handled here for anything?

    -Inside OnDragOver, I query the payload object for "even" integers and update the dragvisual based on the result.  For disallowed drops, I set e.AllowedEffects = "None".  Is that what I'm supposed to be doing to indicate the drop is not currently allowed?  Does doing that stop the "OnDrop" and "OnDragDropCompleted" events from firing if the user drops the object?  Am I supposed to do anythign with e.Handled here?

    -Inside OnDrop, I query the dragvisual to see if the object can be dropped (should I be querying e.AllowedEffects instead or will it only fire when allowed?) and then perform the appropriate actions to manage the lists if allowed.  Should I do something with e.Handled here?

    Basically, I'm a little cloudy on when/where to set e.AllowedEffects, and what I use e.Handled for and how those things affects downstream events.  I've read the documents about the events but they don't have very much detail about the flow between them.


  2. Nick
    Admin
    Nick avatar
    593 posts

    Posted 25 Dec 2013 Link to this post

    Hi Rob,

    Let me get to your questions one by one:

    -Inside OnDragInitialize I fill my payload object, create a dragvisual, and set e.AllowedEffects = "All".  Do I need to set e.Handled here for anything?
    The e.Handled is used to distribute the events the same as any other routed event, so you have to set it if you have a multi level structure that supports drag and drop on multiple visual levels.

    -Inside OnDragOver, I query the payload object for "even" integers and update the dragvisual based on the result.  For disallowed drops, I set e.AllowedEffects = "None".  Is that what I'm supposed to be doing to indicate the drop is not currently allowed?  Does doing that stop the "OnDrop" and "OnDragDropCompleted" events from firing if the user drops the object?  Am I supposed to do anythign with e.Handled here?
    The statement for e.Handled here is the same. As to the Effects, you can use them to check in the Drop and DragDropCompleted event to check whether to execute the dedicated logic.

    -Inside OnDrop, I query the dragvisual to see if the object can be dropped (should I be querying e.AllowedEffects instead or will it only fire when allowed?) and then perform the appropriate actions to manage the lists if allowed.  Should I do something with e.Handled here?
    Basically the previous answer contains the information you are looking for. As for the Handled, it's the same notation. 

    Hope this makes sense! 

    Regards,
    Nik
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for SILVERLIGHT.
    Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
    Sign up for Free application insights >>
  3. DevCraft banner
Back to Top