TreeViewDragDropTarget и проблема границ Silverlight - PullRequest
1 голос
/ 05 февраля 2011

При использовании TreeViewDragDropTarget, когда пользователь перетаскивает элемент за пределы окна браузера и отпускает кнопку за пределами приложения, а после возвращения в приложение индикатор перетаскивания остается видимым, и вся операция не отменяется. Любое решение для этой проблемы?

Ответы [ 2 ]

1 голос
/ 20 февраля 2011

Просто отправив ответ, полученный на форумах silverlight: событие Hookup ItemDragStarting для следующего обработчика событий.

private void DragDropTarget_ItemDragStarting(object sender, ItemDragEventArgs e)
        {                     
            Application.Current.RootVisual.CaptureMouse();
            Application.Current.RootVisual.MouseLeftButtonUp += (s, ee) =>
               {                   
                   this.ReleaseMouseCapture();
                   Point p = ee.GetPosition(Application.Current.RootVisual);
                   if (VisualTreeHelper.FindElementsInHostCoordinates(p, Application.Current.RootVisual).Count() == 0)
                   {            

                      // If mouse is released outside of the Silverlight control, cancel the drag      
                       e.Cancel = true;
                       e.Handled = true;
                   }
               };           
        }
0 голосов
/ 11 февраля 2014

Я не уверен, что лямбда-выражение решит проблему с автоматической отменой регистрации ручки мыши.

Я переписал решение немного по-другому.

    protected override void OnItemDragStarting( ItemDragEventArgs eventArgs )
    {
        Application.Current.RootVisual.CaptureMouse();
        MouseButtonEventHandler handlerMouseUp = null;
        handlerMouseUp = ( s, ee ) =>
        {
            this.ReleaseMouseCapture();
            if ( handlerMouseUp != null )
            {
                Application.Current.RootVisual.MouseLeftButtonUp -= handlerMouseUp;
            }
            Point p = ee.GetPosition( Application.Current.RootVisual );
            if ( VisualTreeHelper.FindElementsInHostCoordinates( p, Application.Current.RootVisual ).Count() == 0 )
            {

                // If mouse is released outside of the Silverlight control, cancel the drag      
                eventArgs.Cancel = true;
                eventArgs.Handled = true;
            }
        };
        Application.Current.RootVisual.MouseLeftButtonUp += handlerMouseUp;

        if ( !eventArgs.Handled ) 
            base.OnItemDragStarting( eventArgs );
    }

В моем случае я также расширил класс TreeViewDragDropTarget. Надеюсь, что это будет с надеждой для кого-то.

...