| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > WPF и Silverlight > WPF Label и привязки |
| Автор: Anyone 19.10.2009, 13:24 | ||||
В шаблоне имеется лейбл на канвасе:
И по этому поводу есть пару вопросов. 1. Мне необходимо чтоб текст метки выравнивался справа от привязанной точки. Свойства HorizontalAlignment и VerticalAlignment почему-то вообще ни на что не влияют. На канвасе они ничего не решают? Использовать Margin в разметке - не выход - текст меняется. У меня единственная идея - забиндить свойство Margin и с помощью конвертера программно его изменять, но не думаю что это самый правильный способ. 2. Привожу часть кода конвертера ConverterConnector:
Видно что Content метки привязывается к номеру элемента канваса (метка находится на другом канвасе), а сам элемент извлекается из значения DataContext. Проблема в том, что если номер изменится, содержимое метки не обновляется. Я могу обновить все метки когда идет пересчет номеров, но хотелось бы избавиться от лишних циклов. Спасибо. |
| Автор: math64 19.10.2009, 13:50 |
| 1. Если нужно выравнивать справа от заданной точки, используется Canvas.Left, если слева - Canvas.Right. HorizontalAlignment и VerticalAlignment используются когда метке предоставлено пространство больше чем ей нужно. Можно ещё положить метку в грид из одной ячейки, который будет лежать на канве. 2. Попробуй использовать IMultiValueConverter. |
| Автор: Anyone 19.10.2009, 14:10 |
| math64, Совсем вылетело из головы что можно задать Canvas.Right вместо Canvas.Left... Но при этом все правильно работает в этом случае, если координату Х домножать на -1. Видимо, придется доучивать мат. часть... IMultiValueConverter и MultiBinding действительно должен помочь. Спасибо за помощь. |
| Автор: Anyone 19.10.2009, 14:37 | ||
Но не помогло:
При этом возникает такой эксепшн времени выполнения: 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() не помогает. |
| Автор: math64 19.10.2009, 15:46 |
| Что означают круглые скобки? Вроде должны быть фигурные. |
| Автор: Anyone 19.10.2009, 16:09 | ||
Книга пишет:
Без них не правильно работает. Хотя старнно, что в большинстве остальных случаев и без скобок работает (к примеру, в триггерах). А если это не составное (что скорее всего), то почему без скобок не работает? |
| Автор: math64 20.10.2009, 07:17 | ||
Но фигурные скобки всё равно нужны - без них будет просто строка, а не биндинг.
Но что писать в фугурных скобках в твоём случае не знаю. |
| Автор: Anyone 20.10.2009, 08:52 |
Так не работает. Работает только так, как я написал. Хотя я согласен с тем, что скобки там не нужны, а фигурные - тем более а Path="{Binding ...}" - это вообще какой-то бред: там же задается путь к свойству... |
| Автор: Anyone 20.10.2009, 12:10 | ||
Все оказалось настолько просто, что аж смешно:
А круглые скобки все-таки нужны! |
| Автор: math64 20.10.2009, 13:26 |
| Да круглые скобки оказались нужны, а фигурные - нет. Можно добавить параметром в конвертер строку форматирования и получится универсальный форматирующий конвертер. Строку форматирования нужно начинать с "{}...", чтобы она не воспринималась как биндинг. |
| Автор: Anyone 20.10.2009, 14:18 | ||
О, пасибки, а то сам бы долго еще разбирался, тем более с этими фигурными скобками. |