2016-10-16 6 views
0

2つのテキストボックスの間でテキストスワップを実装しようとしています。アイデアは、あなたがそれらのいくつかを持っていて、それらの1つを右クリックすると、別のものにドラッグアンドドロップし、第1のテキストは第2のものになり、第2のテキストは第1のものになります。だから、基本的にテキストのスワップ(実際には後で私はフォント名、サイズなどを交換したい...しかし、その時には一歩)。TextBox - 右マウスでドラッグアンドドロップ

RightClickハンドラに関する問題は... ContextMenuを右クリックしてデフォルトで表示されていたため、無効にしました(ContextMenu="{x:Null}")。 私はすでにそれがそのように見えるために私はPreviewMouseRightButtonDownとC#のコードにそれを追加しているMouseRightButtonDownつもりはない仕事にハンドラを追加することを知っている:私は私のテキストボックスの上にマウスの右ボタンを押したときに

private void PreviewMouseRightButtonDownHandler(object sender, MouseButtonEventArgs e) 
{ 
    DragDrop.DoDragDrop(e.Source as DependencyObject, 
         (sender as Textbox).Text, 
         DragDropEffects.Move); 
} 

は今、この関数が実行されます。マウスを少し動かすと不幸にもTextが同じTextBoxにペーストされています:/そしてなぜか分かりません... PreviewMouseLeftButtonDownを使用すると、同じように動作せず、マウスカーソルをドラッグできますTextBoxから外します。


私は=>WPF DragDrop.DoDragDrop (for a RIGHT-Click?) ここで同様の問題を発見し、自分のコードでDragDrop.AddQueryContinueDragHandler(this, QueryContinueDragHandler);ビットを追加しようとしていたが、それが動作していないよう:/ また、それはので、多分何かが持って以来5年ようにされていますその後変更されました。

誰でも?

答えて

1

私はあなたがQueryContinueDragHandlerを追加する方法がわからない(多分コードで?)が、このように「右ボタンD & d」は私の作品(もちろん私はquestionあなたがリンクに触発GOT)

でXAML:

<StackPanel Orientation="Vertical"> 
    <TextBox Margin="10" 
       PreviewMouseRightButtonDown="PreviewMouseRightButtonDownHandler" 
       DragDrop.PreviewQueryContinueDrag="QueryContinueDragHandler" /> 
    <TextBox Margin="10" Text="Drag me" 
       PreviewMouseRightButtonDown="PreviewMouseRightButtonDownHandler" 
       DragDrop.PreviewQueryContinueDrag="QueryContinueDragHandler" /> 
</StackPanel> 

そして、背後にあるコードで:私はそれはあなたを助けることを願って

private void PreviewMouseRightButtonDownHandler(object sender, MouseButtonEventArgs e) 
{ 
    TextBox textBox = sender as TextBox; 
    if (textBox != null) 
    { 
     DragDrop.DoDragDrop(e.Source as DependencyObject, 
      textBox.Text, DragDropEffects.Move); 

     e.Handled = true; 
    } 
} 
private void QueryContinueDragHandler(object source, QueryContinueDragEventArgs e) 
{ 
    TextBox textBox = source as TextBox; 

    e.Handled = true; 

    if (e.EscapePressed) 
    { 
     e.Action = DragAction.Cancel; 
     return; 
    }    

    if ((e.KeyStates & DragDropKeyStates.LeftMouseButton) != DragDropKeyStates.None) 
    { 
     e.Action = DragAction.Continue; 
     return; 
    } 

    if ((e.KeyStates & DragDropKeyStates.RightMouseButton) != DragDropKeyStates.None) 
    { 
     e.Action = DragAction.Continue; 
     return; 
    } 

    e.Action = DragAction.Drop; 

    if (textBox != null) 
    { 
     textBox.Text = String.Empty; 
    } 
} 

+0

ねえ、私は 'QueryContinueDragHandler'をコードで追加していました。だから明らかに私は何とかしてしまった。私はあなたのやり方を試しました(XAMLで追加されました)、それは魅力的なように働いています。助けてくれてありがとう:) – 3vilguy

+0

実際には、ボーナスの質問:V 'QueryContinueDragHandler'で' destination'にアクセスするにはどうすればいいですか?なぜなら、私はある分野から別の分野へテキストを移動させるので、私はそれを交換することはできません。私は完璧なフィットは 'textBox.Text = String.Empty;の直前だと思うけど、落としたオブジェクトをどうやって取得するのか分からない。ドロップハンドラを追加しようとしましたが、TextBoxが空でない場合は実行されません... – 3vilguy

+0

XAMLに 'PreviewDragOver'ハンドラをデスティネーションコントロールに追加しようとしましたか? 'PreviewDragOver =" PreviewDragOver "' –

関連する問題