![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| Anyone |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
В шаблоне имеется лейбл на канвасе:
И по этому поводу есть пару вопросов. 1. Мне необходимо чтоб текст метки выравнивался справа от привязанной точки. Свойства HorizontalAlignment и VerticalAlignment почему-то вообще ни на что не влияют. На канвасе они ничего не решают? Использовать Margin в разметке - не выход - текст меняется. У меня единственная идея - забиндить свойство Margin и с помощью конвертера программно его изменять, но не думаю что это самый правильный способ. 2. Привожу часть кода конвертера ConverterConnector:
Видно что Content метки привязывается к номеру элемента канваса (метка находится на другом канвасе), а сам элемент извлекается из значения DataContext. Проблема в том, что если номер изменится, содержимое метки не обновляется. Я могу обновить все метки когда идет пересчет номеров, но хотелось бы избавиться от лишних циклов. Спасибо. |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 2 Всего: 72 |
1. Если нужно выравнивать справа от заданной точки, используется Canvas.Left, если слева - Canvas.Right.
HorizontalAlignment и VerticalAlignment используются когда метке предоставлено пространство больше чем ей нужно. Можно ещё положить метку в грид из одной ячейки, который будет лежать на канве. 2. Попробуй использовать IMultiValueConverter. |
|||
|
||||
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
math64,
Совсем вылетело из головы что можно задать Canvas.Right вместо Canvas.Left... Но при этом все правильно работает в этом случае, если координату Х домножать на -1. Видимо, придется доучивать мат. часть... IMultiValueConverter и MultiBinding действительно должен помочь. Спасибо за помощь. Это сообщение отредактировал(а) Anyone - 19.10.2009, 14:12 |
|||
|
||||
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Но не помогло:
При этом возникает такой эксепшн времени выполнения: Cannot convert string '(local:Connection.ConnectorEnd.DataContext)' in attribute 'Path' to object of type 'System.Windows.PropertyPath'. Property path is not valid. Cannot resolve type name 'local:Connection.ConnectorEnd'. Программно тоже пока тоже не получается, UpdateLayout() не помогает. Это сообщение отредактировал(а) Anyone - 19.10.2009, 14:47 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 2 Всего: 72 |
Что означают круглые скобки? Вроде должны быть фигурные.
|
|||
|
||||
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Книга пишет:
Без них не правильно работает. Хотя старнно, что в большинстве остальных случаев и без скобок работает (к примеру, в триггерах). А если это не составное (что скорее всего), то почему без скобок не работает? Это сообщение отредактировал(а) Anyone - 19.10.2009, 16:21 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 2 Всего: 72 |
Но фигурные скобки всё равно нужны - без них будет просто строка, а не биндинг.
Но что писать в фугурных скобках в твоём случае не знаю. |
|||
|
||||
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
||||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 2 Всего: 72 |
Так как ты написал - тоже не работает:
т.е. невозможно преобразовать строку к типу System.Windows.PropertyPath. Нужно начинать с фигурной скобки, а что дальше - не знаю. В примере из книжки есть такой мультибиндинг:
но тебе нужно привязываться не к статическому ресурсу. Посмотрел ещё примеры по обычному (не мульти) биндингу. Path по-видимому, задан правильно, но нужно добавить Source, а то путь ищется не в том объекте. Это сообщение отредактировал(а) math64 - 20.10.2009, 13:21 |
|||
|
||||
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Все оказалось настолько просто, что аж смешно:
А круглые скобки все-таки нужны! |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 2 Всего: 72 |
Да круглые скобки оказались нужны, а фигурные - нет.
Можно добавить параметром в конвертер строку форматирования и получится универсальный форматирующий конвертер. Строку форматирования нужно начинать с "{}...", чтобы она не воспринималась как биндинг. |
|||
|
||||
| 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. |