WPF - Drag-drop - Adorner разочарован вне контроля - PullRequest
3 голосов
/ 22 июня 2011

Я использую WPF для создания двух ListViews и реализации функции перетаскивания.(как внутри списка, так и между списками)

Я нашел интересный пост здесь , который делает это.

Однако существует проблема.Когда я перетаскиваю элемент listview из listView1, я вижу рекламодателя (призрачное изображение) только внутри listView1.Когда я хочу сбросить listviewItem на ListView2, я также должен увидеть там рекламодателя.По сути, рекламный элемент отображается только в списке, с которого началась операция перетаскивания.Как только он выходит за пределы listView, он исчезает.

Я провел небольшое исследование и не смог найти способ сделать рекламный знак видимым вне элемента управления, с которого было инициировано перетаскивание.Кто-нибудь может мне помочь с некоторыми предложениями?

1 Ответ

2 голосов
/ 22 июня 2011

Подключите событие GiveFeedback, чтобы обновить расположение рекламодателя за пределами списка.Обновленное свойство ListView из примера и метода ниже (а в методе listview_DragLeave вы не захотите свернуть рекламодателя):

    /// <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();
    }
...