wpf - прозрачное MainWindow и проблемы с DragMove «Может вызывать DragMove только тогда, когда основная кнопка мыши нажата» - PullRequest
3 голосов
/ 07 октября 2010

У меня есть проект wpf, который использует прозрачные окна, и я делюсь этим стилем прозрачного окна для моих диалоговых окон и моего mainwindow.

Я получаю сообщение об ошибке DragMove() моего MainWindow ПОСЛЕ того, как я закрываю диалоговое окно, которое использует тот же стиль окна. Чтобы сделать это еще более странным, это исключение возникает только тогда, когда я обрабатываю событие mouseleftbutton на метке в моем Status Bar на MainWindow. Если я поменяю метку для кнопки и заменим mouseleftbuttondown на событие click, я не получу ошибку.

Странно то, что всплывающее диалоговое окно не реализует dragmove, и я тоже не перетаскиваю свой mainwindow. Каким-то образом dragmove вызывается после того, как выполнение моего кода возвращается к mainwindow после showdialog() вызова.

В настоящее время для меня легко исправить ситуацию - поменять метку на кнопку и вместо нее подключить событие щелчка.

Однако мне больше интересно услышать о том, что вызывает эту проблему и почему срабатывает событие щелчка мышью, а мыши - неудачно.

Мой «StatusBar» - это просто stackpanel с метками и другими стековыми панелями (которые содержат больше меток).

Кто-нибудь еще боролся с этим вопросом раньше? Нужно ли мне реализовывать какое-то переопределение обработчика событий mouseclick, чтобы я мог перехватить и отменить это исключение?

При необходимости может быть предоставлен код Repro. Я получил достаточно хитов на dragmove здесь, так что я надеюсь, что это будет легко для кого-то там.

Заранее спасибо за любую помощь!

Ответы [ 3 ]

3 голосов
/ 07 октября 2010

мой мозг сегодня не работает должным образом. Я забыл о маршрутизации событий в этом сценарии. Мне просто нужно было установить свойство Handled на моем routedevent, которое срабатывало при нажатии кнопки мыши. Каким-то образом я пропустил это в отладчике, прежде чем публиковать тему.

1 голос
/ 08 марта 2012

«Правильный» способ сделать окно без полей подвижным -> https://stackoverflow.com/a/3275712/146032

Обязательно вызывайте DragMove только при срабатывании события MouseLeftButtonDown и не забывайте обрабатывать событие, используя e.Handled = true;

0 голосов
/ 30 марта 2018

, если вы получите это исключение, когда окно сообщения завершено. место Драгемове (); внутри попробуй и пусто в улове.

...