1

ユーザーがブラウザウィンドウの外にアイテムをドラッグしてアプライアンス外のボタンを離し、アプリケーションに戻った後にドラッグインジケータが表示され、操作全体がキャンセルされないときにTreeViewDragDropTargetを使用すると、この問題の回避策はありますか?TreeViewDragDropTargetとSilverlightの境界問題

答えて

1

私は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

ラムダ式がマウスハンドルを自動的に登録解除して大文字と小文字を解決するかどうかわかりません。

解決策を少し書き直しました。

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クラスも拡張しました。これが誰かにとってうまくいくことを願っています。

関連する問題