Не могу перетащить ListBoxItem Adorner за пределы ListBox в WPF -ScrollViewerProblem

Я работаю с приложением WPF, в котором много перетаскивания. Все работает нормально, за исключением ListBoxItems. У меня есть ListBox с ListBoxItems, который можно перетащить на другую цель (StackPanel). Проблема в том, что когда я перетаскиваю курсор за пределы ListBox, я не вижу Adorner, который я установил с помощью ListBoxItem?

Я знаю, что это обычная проблема, но я просто не знаю, как ее исправить. Есть ли что-то, что мне нужно сделать, чтобы позволить мне перетащить за пределы элемента управления ListBox?

Ниже я добавил, как выглядит пользовательский интерфейс. Как видите, внизу слева есть ListBox. Когда я перетаскиваю элемент, появляется рекламный элемент и следует за курсором, пока он находится над ListBox, но если я попытаюсь переместить курсор от списка, Adorner, кажется, почти перейдет под другие элементы управления (zIndex?) . введите описание изображения здесь

Изменить - Решение Я изменил код для обработки AdornerLayer относительно окна, а не относительно AdornedElement

Итак, я изменил

    layer = AdornerLayer.GetAdornerLayer(_originalElement);

to

    layer = AdornerLayer.GetAdornerLayer(this);

Это решило проблему ScrollViwer, обрезавшего AdornerLayer.


person TheJediCowboy    schedule 16.02.2011    source источник


Ответы (1)


ListBox (или, точнее, ScrollViewer в списке) обрезает любые украшения, прикрепленные к его дочерним элементам. Это сделано для того, чтобы не отображались украшения для элементов, прокрученных вне поля зрения. Чтобы обойти это, вам нужно явно указать элемент в оформлении окна, а не в списке или элементе списка.

person Robert Levy    schedule 17.02.2011
comment
это имеет смысл, вы знаете, где я могу найти пример того, как это сделать, или у вас есть какие-либо предложения? Другой вариант, о котором я подумал, - это убрать отсечение средства просмотра прокрутки, используя для моих элементов StackPanel вместо ListBox. - person TheJediCowboy; 17.02.2011
comment
Мне удалось решить эту проблему. Я показал код, который я заменил выше. Спасибо, что указали мне правильное направление! - person TheJediCowboy; 17.02.2011
comment
Вызов AdornerLayer.GetAdornerLayer (mainWindow) вернет значение null. Вы можете обратиться к ссылка - person YantingChen; 03.06.2019