4

ドラッグ/ドロップを処理するカスタムWPFコントロールがあります。OnDragOverをオーバーライドして、他の処理でビジー状態の場合にコントロールがドロップされたオブジェクトを受け入れないようにします。

protected override void OnDragOver(DragEventArgs e)
{
     base.OnDragOver(e);

     if (isBusy)     
          e.Effects = DragDropEffects.None;
     else
          e.Effects = DragDropEffects.Move;

     e.Handled = true;
}

ドラッグアンドドロップを開始する別のコントロールには、操作の開始時に無効になり、操作がキャンセルされた場合、または上記のターゲットが操作が許可されていないとターゲット上でマウスを離した場合に有効になるはずのUI要素があります。

2番目の条件を確認するために、ソース管理でどのイベントを使用できますか?

4

2 に答える 2

3

Hans Passant がコメントで答えたように、操作がキャンセルされたかどうかを確認するには、戻り値DragDropEffects、 ofを使用できますDragDrop.DoDragDrop()

なし: ドロップ ターゲットはデータを受け入れません。

コピー: データはドロップ ターゲットにコピーされます。

移動: ドラッグ元のデータをドロップ先に移動します。

リンク: ドラッグ ソースのデータがドロップ ターゲットにリンクされます。

スクロール: ドロップ ターゲットでスクロールが開始されようとしているか、現在発生しています。

すべて: データがコピーされ、ドラッグ ソースから削除され、ドロップ ターゲットでスクロールされます。

Noneは、関心のある値です。マウスを放すと、操作がキャンセルされ、DoDragDrop()が返されNoneます。

于 2013-05-24T12:16:43.883 に答える
0

WPF ドラッグ & ドロップの進行中、GiveFeedback イベントがドラッグ ソースで継続的に発生しています。イベント引数の状態を確認し、それに応じてドラッグ ソースを更新できます。

以下にコード例を示します: (ドラッグされる要素が dragSource と呼ばれると仮定)

// Attach the event handler
dragSource += OnDragSourceGiveFeedback;

// Event Handler
private void OnDragSourceGiveFeedback(object sender, GiveFeedbackEventArgs e)
    {
        if (e.Effects == DragDropEffects.None)
        {
            // Drop is not allowed on the Drop Target
            dragSource.IsEnabled = false;
        }
    }
于 2013-01-24T19:04:48.640 に答える