C# 在WPF中进行拖放时,如何保持UIELement的形状

C# 在WPF中进行拖放时,如何保持UIELement的形状,c#,wpf,drag-and-drop,uielement,C#,Wpf,Drag And Drop,Uielement,我有两个StackPanels-一个包含一个椭圆,另一个不包含任何内容 我想将椭圆从一个堆栈面板拖动到另一个堆栈面板。实际的拖放操作已经完成,工作正常,但是我想知道如何将椭圆形状保持在鼠标光标的顶端 即使是一个Windows窗体示例也不错,我也可以对其进行调整。您希望在拖动过程中添加拖动装饰器。我已经看到了一些不同的方法,但快速搜索可以找到,它的模式和我看到的一样好。具有代表性的样本是: void itemsControl_PreviewDragEnter(object sender,

我有两个
StackPanel
s-一个包含一个
椭圆
,另一个不包含任何内容

我想将
椭圆
从一个堆栈面板拖动到另一个堆栈面板。实际的拖放操作已经完成,工作正常,但是我想知道如何将
椭圆
形状保持在鼠标光标的顶端


即使是一个Windows窗体示例也不错,我也可以对其进行调整。

您希望在拖动过程中添加拖动装饰器。我已经看到了一些不同的方法,但快速搜索可以找到,它的模式和我看到的一样好。具有代表性的样本是:

    void itemsControl_PreviewDragEnter(object sender, DragEventArgs e)
    {
        ItemsControl itemsControl = (ItemsControl)sender;
        if (e.Data.GetDataPresent(ItemType))
        {
            object data = e.Data.GetData(ItemType);
            InitializeDragAdorner(itemsControl, data, e.GetPosition(itemsControl));
            InitializeInsertAdorner(itemsControl, e);
        }
        e.Handled = true;
    }
它们在
DragAdorner
类中很好地总结了拖动装饰的所有表示。(事实上,我希望我是这样做的)

我也看到过用最初拖动的元素的视觉画笔构建装饰的技巧,但我认为目前为止我最喜欢这种方法

顺便说一句:经过几次不同的讨论之后,我强烈建议将拖放代码包装成一个行为。否则你会把它弄得到处都是。用MVVM获得正确的指挥权是相当棘手的,但这是值得的,IMHO