![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| ArtemCh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.3.2010 Репутация: нет Всего: нет |
Всем доброго времени суток.
Недавно начал осваивать WPF и возникла следующая проблема с шаблонами. У меня есть шаблон элемента управления для ListBoxItem-а (Хочу сделать редактируемый ListBox):
Трудность возникает в следующем: как мне из кода OnSelectionChangeSomeList добраться до свойства Text в определённом в шаблоне TextBox-е? |
|||
|
||||
| SergeyLoginov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.9.2009 Где: Иваново Репутация: 4 Всего: 4 |
Может попробовать получить экземпляр выделенного ListBoxItem'а (item) и найти TextBox с помощью вызова item.Template.FindName("PART_TextBox", item).
Это так... навскидку, сам не проверял. Можно еще порыть в сторону LogicalTreeHelper и VisualTreeHelper |
|||
|
||||
| ArtemCh |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.3.2010 Репутация: нет Всего: нет |
Спасибо.
То что вы предложили пробовал. Пытался даже в отладчике по веткам до TextBox-а добравться, но не получилось... его просто нет в логическом дереве, хотя может не так искал. Вообще я вопрос в более общем виде поставил, мне нужно было просто обновлять источник в привязке при потере фокуса у элемента списка. Так как в шаблоне приходится делать одностороннюю (он не видит если я явно свойство класса укажу). В итоге написал обработчик события и в шаблоне привязал к TextBox-у. Шаблон:
Обработчик:
Это работает, но мне всё же не нравится тем, что если я буду применять шаблон со списком объектов типа SomeClass3, надо дописывать обработчик. Хотелось бы всё таки найти ответ на изначально заданный вопрос. Хотя бы просто узнать в каких случаях возможно добраться из кода до элемента шаблона а в каких нет. |
||||
|
|||||
| SergeyLoginov |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.9.2009 Где: Иваново Репутация: 4 Всего: 4 |
Не совсем понял пояснение, почему нельзя использовать двустороннюю привязку и указать UpdateSourceTrigger=LostFocus. Не ясно из контекста кто там кого не видит Насчет поиска дочернего элемента. Я думаю, все же Вы просто не там (не так) ищете. Если TextBox есть в визуальном дереве ListBoxItem'а (а он судя по шаблону там присутствует), то его можно найти в коде. Попробуйте, к примеру, использовать следующий код:
Опять же не отлаживал, данный код - небольшая непроверенная модификация ранее мной написанного. Под Ваши нужды, наверное, имеет смысл его изменить (например, ввести проверку имени, можно уйти от обобщенности). Но это все детали, главное - принцип. Но все же мне кажется, было бы логичней в конкретном случае использовать UpdateSourceTrigger. И насчет "Хотя бы просто узнать в каких случаях возможно добраться из кода до элемента шаблона а в каких нет.". Мне кажется, что в данном случае "кто ищет, тот всегда найдет" ;) Это сообщение отредактировал(а) SergeyLoginov - 25.3.2010, 17:52 |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |