如何在C# WPF中实现拖放时交换两个标签的数据?

4

我想做类似于以下这样的事情:

A .............. ........... B
______ ........... _______
| RED | .......... | GREEN |
---------- .......... -----------

当我拖动 AB 或者 BA 时,两个标签的文本会互相交换。

A .............. ........... B
______ ........... ... _____
| 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;
    }
}
1个回答

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>

以下是我的CodeBehind事件。
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 祝你好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接