![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
Imir |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 1.10.2008 Репутация: 1 Всего: 1 |
Добрый день!
Задача и проблема в следующем: Программирую специализированный TreeListView (опишу только необходимый минимум) у которого необходимо зафиксировать заголовок от вертикального скрола, а первую левую колонку от горизонтального скрола. Для заголовка использую GridViewColumnCollection, для ячейки применяю DataTemplate. Столбцы:
Шаблон для крайнего левого столбца.
Стиль для крайнего левого заголовка.
Чтобы зафиксировать заголовок использую Style для ScrollViewer в котором фиксирую заголовок от вертикального скрола помещая GridViewHeaderRowPresenter в ScrollViewer, а для скрола данных использую ScrollContentPresenter. Для того, чтобы зафиксировать крайний столбец от горизонтального скрола применяю SelectiveScrollingGrid с требуемой ориентацией SelectiveScrollingOrientation. На этом можно сказать все сделано, но со следующей проблемой: При горизонтальном скроле фиксированный столбец остается на месте, но правые от него начинают его перекрывать, то есть не под него заезжают а на него. Кстати, заголовок ведет себя именно так как нужно, то есть все правые заголовки скролятся под него, что мне и нужно (смотрите прикрепленный рисунок). Но как быть с ячейками данных? Для решения этой задачи как я понимаю, для визуального дерева нужно задать ZIndex каждой ячейки строки GridViewHeaderRowPresenter. Но дело в том, что GridViewHeaderRowPresenter создает визуальное дерево в котором все котролы из DataTemplate помещает в ContentPresenter, а как я понял ZIndex влияет на все котролы в рамках родителя. Чтобы каждому ContentPresenter (а у меня их 4-ре по числу столбцов) выставить необходимый ZIndex, создал наследник от GridViewRowPresenter в котором перегрузил метод OnVisualChildrenChanged. То есть я обрабатываю события добавления нового чилда в визуальное дерево. Затем я выполняю поиск своего контрола с именем PART_eShell_pExplorer_Cell_Holder и если нахожу то у его ContentPresenter повышаю ZIndex.
Но этот метод не помогает в отладчике я просматриваю визуальное дерево и вижу, что у необходимых мне ContentPresenter ZIndex именно тот, что я выставил. Но порядок этих ContentPresenter в этом визуальном дереве не изменили свое положение, они по прежнему в том порядке в котором указаны столбцы в GridViewColumnCollection. Если к примеру сравнивать заголовки, то они в визуальном дереве расположены в обратной последовательности, из-за чего как я понимаю заголовок ведет себя именно так как я хочу. То есть все мои действия четны. Визуальное дерево для GridViewRowPresenter не хочет изменятся и ZIndex не помогает. Как мне быть в этом случае? (Для вложенных котролах в ContentPresenter, если я меняю ZIndex, то он влияет на их расположение в визуальном дереве). Присоединённый файл ( Кол-во скачиваний: 13 ) ![]() |
||||||||
|
|||||||||
Gvozdin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 9.8.2011 Где: Москва Репутация: 8 Всего: 8 |
Ниасилил
![]() Тут уж сразу бы готовый пример в студию. Или могу предложить свою реализацию TreeListView. --------------------
http://gvozdin.ru |
|||
|
||||
Imir |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 1.10.2008 Репутация: 1 Всего: 1 |
В том, то и дело, что проблема не в написании TreeListView а в том, что проблема в неверном поведении колонок при сокролировании в том случае если один из столбцов зафиксировать при помощи SelectiveScrollingGrid.
|
|||
|
||||
Gvozdin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 9.8.2011 Где: Москва Репутация: 8 Всего: 8 |
Создайте проект минимальный воспроизводящий ситуацию.
--------------------
http://gvozdin.ru |
|||
|
||||
Imir |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 1.10.2008 Репутация: 1 Всего: 1 |
В прикрепленном файле XAML окна в котором описан компонент с фиксированной колонкой. На DataBinding внимание не обращайте. Чтобы увидеть проблему, необходимо растянуть заголовок любой колонки, чтобы появился горизонтальный скрол и при прокрутки, видно как крайняя левая колонка фиксирована от перемещения, а правые от нее перекрывают ее. Это сообщение отредактировал(а) Imir - 30.11.2011, 14:50 Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |