![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
Anyone |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Пишу контрол, производный от Canvas. Необходимо добавить сетку с возможностью изменения шага по горизонтали и вертикали(в виде точек желательно, накрайняк, пунктирных линий), к которой возможна привязка элементов Canvas'а. Ничего подобного я не нашел, потому хотел бы спросить каким образом лучше всего поступить? Может быть лучше всего рисовать ее при обновлении Canvas'a (если да, то куда копать)? Также есть другая идея - использовать Grid и выставить свойство ShowGridLines="True":
Но этот вариант мне не нравится, потому что выходит очень не красиво, размеры ячеек немного колеблятся в зависимости от положения скроллов, снизу и справа иногда не прорисовывается сетка. Смещаю таким образом:
И еще один вопрос, как можно изменить вид линий грида? хочу вообще заменить на точки. Есть другие идеи? |
||||
|
|||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
Anyone, ага...можно попробовать собственный adorner реализовать, в котором и отрисовывать соответствующую сетку линиями
-------------------- СУВ, Partizan. |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
||||
|
||||
rooks |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 28.9.2008 Где: Минск Репутация: 5 Всего: 9 |
а как насчет сделать бэкграунд с помощью DrawingBrush?
Это сообщение отредактировал(а) rooks - 28.7.2009, 01:38 |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
А как в этом случае менять шаг сетки и смещать ее при прокрутке? Определить эти все свойства в моем производном классе а сетку определить в шаблоне с привязками к этим свойствам, или лучше програмно генерить и переприсваивать кисть? А вообще-то свойство Background мне еще пригодится для того чтоб задать фоновый рисунок или цвет, думаю заливать этой кистью какой-нить прямоугольник внутри канваса. Это сообщение отредактировал(а) Anyone - 28.7.2009, 08:59 |
|||
|
||||
neiron |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 18.4.2006 Где: Краснодар Репутация: нет Всего: 4 |
Шаг вполне можно менять скейлтрансформом. Хочешь увеличивай, хочешь уменьшай. скейл для самого Drawing, а не для канвы.
А смещать соответственно транслейтом |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Большое спасибо за помощь. Видимо, создавать кисть - наилучший вариант.
|
|||
|
||||
Anyone |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Вот как я добавляю сетку:
И у меня пару вопросов: 1. Как сделать чтобы прямоугольник полностью залил всю область канваса? 2. Как с помощью ScaleTransform изменить шаг сетки так, чтобы размер точек оставался в 1 пиксел? 3. Как правильно использовать ScaleTransform для кисти? Для шага (25;50) я написал такой код:
Но при этом точки тоже отмасштабировались. |
||||
|
|||||
neiron |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 18.4.2006 Где: Краснодар Репутация: нет Всего: 4 |
1. VerticalAligment = "Stretch" HorizontalAligment = "Stretch" для прямоугольника. Учитывая что он кистью отрисовывается - должен замостить канву.
2-3. Что-то в голову не приходит ничего простого. Только переопределение кисти. Операция не слишком трудозатратная, потому, думаю, латентности не добавит. кисти вроде бы freezable поддерживают - должны автоматом перерисовываться. |
|||
|
||||
Anyone |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
В том то и дело, что не помогает... Наверное придется програмно по актульным размерам канваса, что не очень то и хочется...
Вот и мне только это приходит в голову. Добавлено через 9 минут и 9 секунд А можно в этом случае использовать привязки к свойствам владельца кисти?
Тогда все эти свойства можно будет определить в канвасе (прямоугольнике). |
||||||
|
|||||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Попытался выполнить это с помощью стиля, но с привязкой данных ничего не получается (Brush="{Binding Stroke}").
Что я делаю не так? |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Также попытался програмно создавать кисть, но ничего не получилось:
|
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Решил задачу с помощью програмной кисти.
Всем спасибо за помощь. Правда хотелось бы еще попробывать с помощью шаблона\стиля, буду благодарен за подсказку по поводу привязки параметров кисти к свойствам контрола. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |