2017-04-18 56 views
4

我想要做的事就像 我有两个标签如何在C#WPF中拖放两个标签的Exchange数据?

一个.............. ...........乙
______。 .......... _______
| RED | .......... | GREEN |
---------- .......... -----------

当我拖动 OR 两者交换的文本

甲.............. ...........乙
______ ...... ..... ... _____
| GREEN | .......... | 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; 
} 

所以基本上我创建了一个全球标签DraggingLabel用它在Label_Drop互换文本。

最终输出。

enter image description here

好运。

+2

谢谢@AVKNaidu –