WPF Adorner Clipping
У меня есть ItemsControl
в ScrollViewer
, Предметы в ItemsControl
расширены до DataTemplate
который в основном состоит из Adorner
,
Теперь проблема заключается в том, что при прокрутке визуальные дети Adorner
видны снаружи ScrollViewer
, Допустим, я прокручиваю от горизонтального смещения от 0 до 100, визуальные дочерние элементы Adorner
двигаться влево и видны рядом с ScrollViewer
, хотя они должны быть скрыты. настройка ClipToBounds
на ItemsControl
или ScrollViewer
не работает.
Я это понимаю Adorner
отображаются над всеми элементами в z-порядке, но они действительно не должны быть видны в таких случаях, как с ScrollViewer
, Украшенный Element
кстати ведет себя как ожидалось и не виден через ScrollViewer
,
Есть ли простой способ "обрезать" Adorner
s, так что они видны только в видимой области прокрутки?
Спасибо Андрей
4 ответа
В следующем потоке Вэй Чжоу повторно шаблонизирует ScrollViewer, поэтому Adorner кнопки ограничен.
Реализовать выделение выделения - советуйте пожалуйста
С уважением, Дэвид
Настройка ClipToBounds
на содержании контроля недостаточно. Вы должны установить рекламодателя IsClipEnabled
собственность тоже.
Я столкнулся с той же проблемой, когда создавал подклассы в WPFToolkit DataGrid, чтобы нарисовать украшение вокруг текущей ячейки.
Содержимое ScrollViewer визуализируется экземпляром ScrollContentPresenter. ScrollContentPresenter имеет свой собственный слой рекламного объявления, доступный через свойство ScrollContentPresenter.AdornerLayer.
Я обнаружил, что мой рекламодатель правильно обрезает, если я добавлю его в этот слой.
Мое решение состояло в том, чтобы вставить область клипа в контекст рисования, визуализировать все, что мне нужно, и вставить вырез в конце, например так:
drawingContext.PushClip(new RectangleGeometry(new Rect(0, 0, this.AdornedElement.RenderSize.Width, this.AdornedElement.RenderSize.Height)));
// continue drawing
drawingContext.Pop();
Вы можете подключить это к любому Adorner, границы уже доступны как часть элемента.