【问题标题】:How can I do Exchange data of two labels on drag and drop in C# WPF?如何在 C# WPF 中拖放时交换两个标签的数据?
【发布时间】:2017-04-18 21:56:50
【问题描述】:

我想做类似的事情 我有两个标签

A .................... B
______ ...... _______
|红色 | .......... |绿色 |
---------- .......... -----------

当我将 A 拖到 B 上或 B 拖到 A 上时,双方交换的文字

A .................... B
______ ...... ... _____
|绿色| .......... |红色 |
---------- ...... ---------

我已经做了一点

主窗口

当我从 代码 拖放文本时,会出现在放置标签上

当我将红色拖到绿色时:

我的代码:

    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;
    }
}

【问题讨论】:

    标签: c# wpf drag-and-drop


    【解决方案1】:

    这是我实现它的方法。

    下面是我的 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 使用它来交换文本。

    最终输出。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多