![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Создал контрол, производный от Canvas, прокрутка осуществляется с помощью 2х скроллбаров, что позволяет абстрагироваться от размеров холста и размещать элементы в больших приделах координат. Как правильно осуществлять скроллинг? Я так понимаю, нужно изменять координаты каждого элемента, а можно подвинуть сразу все содержимое? Вот мой код:
|
|||
|
||||
fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: нет Всего: 2 |
Конечно можно. Создавай объект TranslateTransform и передавай его в свойство RenderTransform твоего канваса. После этого регулируй состояние TranslateTransform при помощи полей X и Y, это и будет твой сдвиг.
--------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
Anyone, что мешало Canvas кинуть внутрь ScrollViewer-а?
-------------------- СУВ, Partizan. |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Ничего не мешает, кроме огранченности поля. Практика показывает что больше производительности можно получить, если перемещать содержимое на небольшом канвасе, чем создавать большое поле, которое прокручивается стандартными средствами. При размерах канваса больше чем 4000х4000 инициализация происхоит очень медленно. Не хочу на ровном месте терять то, что я могу получить почти даром, если немного посижу над кодом. Дык при этом смещается сам канвас, а не содержимое (насколько я помню...). |
|||
|
||||
fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: нет Всего: 2 |
Визуально это будет выглядеть точно также как будто ты будешь двигать все содержимое одновременно. Тоесть твой контрол не побежит вправо или влево, просто его содержимое будет рисоваться со сдвигом. Я когда то делал примерно следующее, когда кликаешь на канвас средней кнопкой мыши и тянешь, то якобы передвигается все содержимое вслед за мышью. Производительность на высоте, потому что даже OnRender не вызывается. Только не забудь поставить ClipToBounds в false, иначе у тебя не будет ничего рисоваться что выходит за мнимые границы канваса. --------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Не догадался. Но при этом существует несколько проблем. 1. Фон все таки передвигается. Думаю добавить 2 прямоугольника с фоном и сеткой и смещать их. 2. Канвас вылазит все таки на другие контролы и перекрывает их. Нужно выставить z-индекс сооветвующим образом? |
|||
|
||||
fantast |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: нет Всего: 2 |
Если я правильно понял, то по-моему лучше сделать фон у канваса полностью прозрачным, а твою сетку замостить в контейнере, в котором он храниться, правильно выставив z-индекс.
если канвас вылазит, то наверно надо выставить ClipToBounds в true у конейнера в котором он храниться, если вылазит его содержимое - то у содержимого надо выставлять. Если все правильно понял ) --------------------
Эпитафия: Он старался. Неизвестный |
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |