![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| Bladerender |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Такая задача. TextBox. Я нажимаю на текст внутри него левой кнопкой мыши и в состоянии "левая кнопка зажата и удерживается" я хочу узнать позицию в тексте, на которой я нажал и держу.
Как я это пытаюсь сделать. Подписываюсь на ивент PreviewMouseLeftButtonDown.
В чем проблема такого подхода. В том, что каретка переходит на новое место после того как нажали и отжали мышку. А в состоянии нажато она еще не перешла на новую позицию, хотя палочка каретки уже перешла на новое место. Подскажите выход, а то как-то никак... PS: И какая разница между MouseLeftButtonDown и PreviewMouseLeftButtonDown? А то без Preview у меня и этого сделать не получилось. Как-то он не срабатывает... Это сообщение отредактировал(а) Bladerender - 26.1.2011, 18:12 |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
Оба эвента - RoutedEvents. Разница в том, что все эвенты, которые начинаются с приставки Preview - туннельные (Tunnel strategy). Остальные эвентаы как правило пузырьковые (Bubble strategy). Первые идут от корня дерева элементов к дочерним контролам, вторые - наоборот.
Если по-простому описать - preview происходит ДО того как происходит реакция на нажатие кнопки. А второй эвент - после. Поэтому если ты подписываешься на превью - твой текстбокс ещё не отреагировал на событие нажатия на кнопку (а значит и каретку не переместил ещё). Так что тут тебе ловить нечего Подписываться надо именно на MouseLeftButtonDown. Только как ты правильно сказал для контрола ТекстБокс этот эвент не срабатывает. Это происходит потому, что некоторые контролы самолично обрабатывают некоторые эвенты и помечают их как обработанные. А если эвент помечен как обработанный то дальше он не выстреливает для подписчиков. Для того чтобы это обойти - подписывайся на эвент в коде следующим образом и будет тебе счастье:
true в третьем параметре даст понять фреймворку, что ты хочешь подписать в том числе и на обработанные эвенты. Это сообщение отредактировал(а) Kefir - 1.2.2011, 21:54 |
|||
|
||||
| Bladerender |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Спасибо. Сработало. Почитаю, почитаю...
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |