WPF-拖放-装饰器在控件外消失

WPF-拖放-装饰器在控件外消失,wpf,drag-and-drop,adorner,Wpf,Drag And Drop,Adorner,我正在使用WPF创建两个ListView并实现拖放功能。(内部listview和内部listview) 我发现了一个有趣的帖子 然而,有一个问题。当我从listView1拖动listviewitem时,我只在listView1中看到装饰器(重影图像)。当我想将listviewItem放在ListView2上时,我必须在那里看到装饰器。基本上,装饰器只出现在拖动操作开始的listView上。一旦它位于listView之外,它就会消失 我做了一些研究,但找不到一种方法使装饰器在启动拖动的控件之外可见

我正在使用WPF创建两个ListView并实现拖放功能。(内部listview和内部listview)

我发现了一个有趣的帖子

然而,有一个问题。当我从listView1拖动listviewitem时,我只在listView1中看到装饰器(重影图像)。当我想将listviewItem放在ListView2上时,我必须在那里看到装饰器。基本上,装饰器只出现在拖动操作开始的listView上。一旦它位于listView之外,它就会消失

我做了一些研究,但找不到一种方法使装饰器在启动拖动的控件之外可见


有人能帮我提些建议吗?

连接GiveFeedback事件以更新listview之外的装饰器位置。根据下面的示例和方法更新了ListView属性(在ListView\u DragLeave方法中,您不希望折叠装饰器):

//
///获取/设置管理其拖动的ListView。此属性
///可以设置为null,以防止发生拖动管理。如果
///ListView的AllowDrop属性为false,将设置为true。
/// 
公共列表视图列表视图
{
获取{return listView;}
设置
{
如果(此.IsDragInProgress)
抛出新的InvalidOperationException(“无法在拖动操作期间设置ListView属性”);
如果(this.listView!=null)
{
#区域取消挂钩事件
this.listView.PreviewMouseLeftButtonDown-=listView\u PreviewMouseLeftButtonDown;
this.listView.PreviewMouseMove-=listView\u PreviewMouseMove;
this.listView.DragOver-=listView\u DragOver;
this.listView.DragLeave-=listView\u DragLeave;
this.listView.DragEnter-=listView\u DragEnter;
this.listView.GiveFeedback-=listView\u GiveFeedback;
this.listView.Drop-=listView\u Drop;
#endregion//取消挂钩事件
}
this.listView=值;
如果(this.listView!=null)
{
如果(!this.listView.AllowDrop)
this.listView.AllowDrop=true;
#区域挂钩事件
this.listView.PreviewMouseLeftButtonDown+=listView\u PreviewMouseLeftButtonDown;
this.listView.PreviewMouseMove+=listView\u PreviewMouseMove;
this.listView.DragOver+=listView\u DragOver;
this.listView.DragLeave+=listView\u DragLeave;
this.listView.DragEnter+=listView\u DragEnter;
this.listView.GiveFeedback+=listView\u GiveFeedback;
this.listView.Drop+=listView\u Drop;
#endregion//钩子事件
}
}
}
void listView\u GiveFeedback(对象发送者,GiveFeedbackEventArgs e)
{
如果(此.showdragadorresolved)
this.UpdateDragAdornerLocation();
}

在玩这个游戏时,我又遇到了一件事。也就是说,如果有一个动画弹出窗口打开,显示第二个列表视图,则装饰器不再可见。它仅在页面上可见,在弹出窗口中不可见。有可能克服此限制吗?感谢Nihar,我不知道如何在窗口之外进行即时渲染,需要进行一些研究。:-)
    /// <summary>
    /// Gets/sets the ListView whose dragging is managed.  This property
    /// can be set to null, to prevent drag management from occuring.  If
    /// the ListView's AllowDrop property is false, it will be set to true.
    /// </summary>
    public ListView ListView
    {
        get { return listView; }
        set
        {
            if( this.IsDragInProgress )
                throw new InvalidOperationException( "Cannot set the ListView property during a drag operation." );

            if( this.listView != null )
            {
                #region Unhook Events

                this.listView.PreviewMouseLeftButtonDown -= listView_PreviewMouseLeftButtonDown;
                this.listView.PreviewMouseMove -= listView_PreviewMouseMove;
                this.listView.DragOver -= listView_DragOver;
                this.listView.DragLeave -= listView_DragLeave;
                this.listView.DragEnter -= listView_DragEnter;
                this.listView.GiveFeedback -= listView_GiveFeedback;
                this.listView.Drop -= listView_Drop;

                #endregion // Unhook Events
            }

            this.listView = value;

            if( this.listView != null )
            {
                if( !this.listView.AllowDrop )
                    this.listView.AllowDrop = true;

                #region Hook Events

                this.listView.PreviewMouseLeftButtonDown += listView_PreviewMouseLeftButtonDown;
                this.listView.PreviewMouseMove += listView_PreviewMouseMove;
                this.listView.DragOver += listView_DragOver;
                this.listView.DragLeave += listView_DragLeave;
                this.listView.DragEnter += listView_DragEnter;
                this.listView.GiveFeedback += listView_GiveFeedback;
                this.listView.Drop += listView_Drop;

                #endregion // Hook Events
            }
        }
    }

    void listView_GiveFeedback(object sender, GiveFeedbackEventArgs e)
    {
        if (this.ShowDragAdornerResolved)
            this.UpdateDragAdornerLocation();
    }