3

ドラッグアンドドロップの実装を備えた WPF アプリケーションがあります... ツリー項目をドラッグするたびに、そのイベントGridによって処理されますが、 2 回起動されるたびに、何が原因でしょうか?DragDropGrid

以下は、 にドラッグ ドロップを実装するためのコードですTreeView

 void treeViewGroups_MouseMove(object sender, MouseEventArgs e)
 {
   try
   {
     if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed)
     {
        Point position = e.GetPosition(null);
        if (Math.Abs(position.X - this.startPoint.X) > SystemParameters.MinimumHorizontalDragDistance || Math.Abs(position.Y - this.startPoint.Y) > SystemParameters.MinimumVerticalDragDistance)
        {
          DataRowView treeViewItem = this.treeViewGroups.SelectedItem as DataRowView;
          if (treeViewItem != null)
          if ((treeViewItem.Row.Table.TableName == "TableGroup"))
          {
             ViewTaxSCConstants.dragElement = treeViewItem;
             Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render, new System.Threading.ParameterizedThreadStart(DoDragDrop), treeViewItem);                                
           }
        }
     }
}
4

2 に答える 2

3

ほとんど同じ問題がありました。MouseMove でドラッグ イベントを開始し、特定の TreeViewItems でドロップ イベントが発生しました。ドロップ イベントが最初に発生した後、2 回目の発生が発生しますが、ターゲットは別の要素 (私の場合は、ターゲットだった要素の親) になります。

それを解決するにe.Handled = trueは、Drop イベントを設定する必要がありました。

于 2015-05-11T14:56:43.567 に答える
-1

これはドラッグ&ドロップの良い方法だと思います

ダーグとドロップの良い方法は、次のように説明されています。

MouseMove と MouseLeftButtonDown の組み合わせとしてドラッグを検出します

ドラッグするデータを見つけて、フォーマット、データ、および許可された効果を含む DataObject を作成します。

DoDragDrop() を呼び出してドラッグを開始します。

ドロップを許可する要素の AllowDrop プロパティを True に設定します。

ドロップ位置でのドラッグを検出するために、DragEnter イベントにハンドラーを登録します。イベント引数で GetDataPresent() を呼び出して、形式とデータを確認します。データをドロップできる場合は、イベント引数の Effect プロパティを設定して、適切なマウス カーソルを表示します。

ユーザーがマウス ボタンを放すと、DragDrop イベントが呼び出されます。イベント引数で提供された Data オブジェクトで GetData() メソッドを呼び出して、データを取得します。

ここで完全な記事を見つけることができます

于 2009-09-08T11:36:24.967 に答える