2017-04-18 8 views
4

私は2つのラベルC#WPFで2つのラベルのExchangeデータをドラッグアンドドロップするにはどうすればよいですか?

A .............. ........... B
______を持って のような何かをしたいです。 .......... _______
| RED | .......... |グリーン|
---------- .......... -----------

私はのB OR Bをドラッグ両方の交換のテキスト

A .............. ........... B
______ ......
..... ... _____
|グリーン| .......... | RED |
---------- ............... ---------

私はそれ

の少しを行っています

メインウィンドウ
main window

私はドラッグすると、私は緑に赤ドラッグすると、ドロップラベル

に来コードからテキストをドロップ:
When I drag red on green

マイコード:ここで

private void Label_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     Label lblFrom = e.Source as Label; 


     if (e.LeftButton == MouseButtonState.Pressed) 
      DragDrop.DoDragDrop(lblFrom, lblFrom.Content, DragDropEffects.Copy); 
    } 

    private void Label_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) 
    { 
     Label lblFrom = e.Source as Label; 

     if (!e.KeyStates.HasFlag(DragDropKeyStates.LeftMouseButton)) 
      lblFrom.Content = "RED"; 

    } 

    private void Label_Drop(object sender, DragEventArgs e) 
    { 
     string draggedText = (string)e.Data.GetData(DataFormats.StringFormat); 

     Label toLabel = e.Source as Label; 
     toLabel.Content = draggedText; 
    } 
} 

答えて

3

は、私はそれを達成する方法です。

以下は私のXAMLです。

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Label Width="50" Height="50" Background="Red" Content="Red" HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" MouseDown="Label_MouseDown" Drop="Label_Drop" AllowDrop="True"/> 
    <Label Width="50" Height="50" Background="Green" Content="Green" HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Grid.Column="1" MouseDown="Label_MouseDown" Drop="Label_Drop" AllowDrop="True"/> 
</Grid> 

は以下

Label DraggingLabel; 
private void Label_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    DraggingLabel = sender as Label; 
    if (e.LeftButton == MouseButtonState.Pressed) 
     DragDrop.DoDragDrop(DraggingLabel, DraggingLabel.Content, DragDropEffects.Copy); 
} 

private void Label_Drop(object sender, DragEventArgs e) 
{ 
    Label originalsource = e.OriginalSource as Label; 
    Label lblToDrop = sender as Label; 
    string fromContent = lblToDrop.Content.ToString(); 
    lblToDrop.Content = (string)e.Data.GetData(DataFormats.StringFormat); 
    DraggingLabel.Content = fromContent; 
} 

だから基本的に私は、テキストを交換するLabel_Dropでそれを使用するDraggingLabelグローバルラベルを作成し、私の分離コードのイベントです。

最終出力。

enter image description here

グッドラック。

+2

ありがとう@AVKNaidu –

関連する問題