| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > WPF и Silverlight > TextBox MouseDown |
| Автор: Bladerender 26.1.2011, 18:07 | ||
| Такая задача. TextBox. Я нажимаю на текст внутри него левой кнопкой мыши и в состоянии "левая кнопка зажата и удерживается" я хочу узнать позицию в тексте, на которой я нажал и держу. Как я это пытаюсь сделать. Подписываюсь на ивент PreviewMouseLeftButtonDown.
В чем проблема такого подхода. В том, что каретка переходит на новое место после того как нажали и отжали мышку. А в состоянии нажато она еще не перешла на новую позицию, хотя палочка каретки уже перешла на новое место. Подскажите выход, а то как-то никак... PS: И какая разница между MouseLeftButtonDown и PreviewMouseLeftButtonDown? А то без Preview у меня и этого сделать не получилось. Как-то он не срабатывает... |
| Автор: Kefir 1.2.2011, 21:52 | ||
| Оба эвента - RoutedEvents. Разница в том, что все эвенты, которые начинаются с приставки Preview - туннельные (Tunnel strategy). Остальные эвентаы как правило пузырьковые (Bubble strategy). Первые идут от корня дерева элементов к дочерним контролам, вторые - наоборот. Если по-простому описать - preview происходит ДО того как происходит реакция на нажатие кнопки. А второй эвент - после. Поэтому если ты подписываешься на превью - твой текстбокс ещё не отреагировал на событие нажатия на кнопку (а значит и каретку не переместил ещё). Так что тут тебе ловить нечего Подписываться надо именно на MouseLeftButtonDown. Только как ты правильно сказал для контрола ТекстБокс этот эвент не срабатывает. Это происходит потому, что некоторые контролы самолично обрабатывают некоторые эвенты и помечают их как обработанные. А если эвент помечен как обработанный то дальше он не выстреливает для подписчиков. Для того чтобы это обойти - подписывайся на эвент в коде следующим образом и будет тебе счастье:
true в третьем параметре даст понять фреймворку, что ты хочешь подписать в том числе и на обработанные эвенты. |
| Автор: Bladerender 2.2.2011, 13:07 |
| Спасибо. Сработало. Почитаю, почитаю... |