Wpf 将文本块从stackpanels拖放到画布

Wpf 将文本块从stackpanels拖放到画布,wpf,drag-and-drop,Wpf,Drag And Drop,我有一个分为3列的网格。第一个包含StackPanel,第二个包含画布,第二个包含StackPanel。加载“我的窗口”时,StackPanel将填充文本块。如何将这些文本块拖放到画布上 我尝试使用mouseDown和mouseMove事件,但失败了 Xaml: 代码: 公共部分类主窗口:窗口 { 公共主窗口() { 初始化组件(); 加载+=主窗口\u加载; } 已加载无效主窗口(对象发送器、路由目标) { 对于(int i=0;i

我有一个分为3列的网格。第一个包含StackPanel,第二个包含画布,第二个包含StackPanel。加载“我的窗口”时,StackPanel将填充文本块。如何将这些文本块拖放到画布上

我尝试使用mouseDown和mouseMove事件,但失败了

Xaml:


代码:

公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
加载+=主窗口\u加载;
}
已加载无效主窗口(对象发送器、路由目标)
{
对于(int i=0;i<3;i++)
{
TextBlock=新的TextBlock();
Block.FontSize=25;
Block.Text=(i+1).ToString();
Block.MouseMove+=Block\u MouseMove;
APanel.Children.Add(块);
}
对于(int i=3;i<6;i++)
{
TextBlock=新的TextBlock();
Block.FontSize=25;
Block.Text=(i+1).ToString();
Block.MouseMove+=Block\u MouseMove;
BPanel.Children.Add(块);
}
}
void Block_MouseMove(对象发送器,MouseEventArgs e)
{
DragDrop.DoDragDrop((发送方作为文本块)。父对象、发送方、DragDropEffects.Move);
}
}

发布当前代码和XAML。我发现在两个数据绑定控件之间设置拖放非常有用。我甚至将它(经过一些修改)用于与您完全相同的场景,即在
StackPanel
Canvas
之间拖动项目,尽管在我的情况下,我的StackPanel浮动在画布上,而不是在画布旁边
<Window x:Class="StackDragDrop.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="800" Width="1000">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="4*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <StackPanel Orientation="Vertical" Name="APanel" HorizontalAlignment="Center"/>
    <Canvas Name="MyCanvas" Grid.Column="1" AllowDrop="True"/>
    <StackPanel Orientation="Vertical" Name="BPanel" Grid.Column="2" HorizontalAlignment="Center"/>
</Grid>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Loaded += MainWindow_Loaded;
    }

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        for (int i = 0; i < 3; i++)
        {
            TextBlock Block = new TextBlock();
            Block.FontSize = 25;
            Block.Text = (i + 1).ToString();
            Block.MouseMove += Block_MouseMove;
            APanel.Children.Add(Block);
        }
        for (int i = 3; i < 6; i++)
        {
            TextBlock Block = new TextBlock();
            Block.FontSize = 25;
            Block.Text = (i + 1).ToString();
            Block.MouseMove += Block_MouseMove;
            BPanel.Children.Add(Block);
        }
    }

    void Block_MouseMove(object sender, MouseEventArgs e)
    {
        DragDrop.DoDragDrop((sender as TextBlock).Parent, sender, DragDropEffects.Move);
    }
}