У меня двоякий вопрос, и я надеюсь, что WPF предлагает более простые решения , чем стандартные решения WinForms (которые предоставил Кристоф Гирс, прежде чем я сделал это разъяснение).
Во-первых, есть ли способ сделать окно перетаскиваемым без захвата и обработки событий щелчка мышью + перетаскивания? Я имею в виду, что окно можно перетаскивать с помощью строки заголовка, но если я устанавливаю окно, чтобы его не было, и все же хочу иметь возможность перетаскивать его, есть ли способ просто перенаправить события каким-либо образом на то, что обрабатывает перетаскивание строки заголовка ?
Во-вторых, есть ли способ применить обработчик событий ко всем элементам в окне? Например, сделайте окно перетаскиваемым независимо от того, какой элемент пользователь щелкает + перетаскивает. Очевидно, без добавления обработчика вручную для каждого отдельного элемента. Просто сделать это хоть раз где-нибудь?
источник
MouseLeftButtonDown
событие, а не проверять .cs?MouseLeftButtonDown
него есть стратегия прямой маршрутизации, аMouseDown
есть стратегия восходящей маршрутизации. См. Раздел примечаний на странице MSDN для MouseLeftButtonDown для получения дополнительной информации и некоторых дополнительных вещей, о которых следует знать, если вы собираетесь использоватьMouseLeftButtonDown
overMouseDown
.если форма wpf должна быть перетаскиваемой, независимо от того, где она была нажата, простая работа заключается в использовании делегата для запуска метода DragMove () либо в событии загрузки Windows, либо в событии загрузки сетки
источник
DragMove
может быть вызван только тогда, когда основная кнопка мыши нажата.Иногда у нас нет доступа
Window
, например, если мы используемDevExpress
, все, что доступно, - этоUIElement
.Шаг 1. Добавьте прикрепленное свойство
Решение состоит в следующем:
MouseMove
событиям;Window
;.DragMove()
нашим недавно открывшимсяWindow
.Код:
Шаг 2. Добавьте прикрепленное свойство к любому элементу, чтобы он мог перетаскивать окно
Пользователь может перетащить все окно, щелкнув определенный элемент, если мы добавим это прикрепленное свойство:
Приложение A: Дополнительный расширенный пример
В этом примере от DevExpress мы заменяем строку заголовка закрепляемого окна нашим собственным серым прямоугольником, а затем гарантируем, что если пользователь щелкнет и перетащит указанный серый прямоугольник, окно будет нормально перетаскиваться:
Отказ от ответственности: я не связан с DevExpress . Этот метод будет работать с любым пользовательским элементом, включая стандартный WPF или Telerik (еще один прекрасный поставщик библиотеки WPF).
источник
В некоторых случаях выдает исключение (например, если в окне у вас также есть интерактивное изображение, которое при нажатии открывает окно сообщения. Когда вы выходите из окна сообщения, вы получаете сообщение об ошибке) Безопаснее использовать
Итак, вы уверены, что в этот момент нажата левая кнопка.
источник
e.LeftButton
вместо того,Mouse.LeftButton
чтобы специально использовать кнопку, связанную с аргументами события, хотя это, вероятно, никогда не будет иметь значения.Можно перетащить форму, щелкнув в любом месте формы, а не только в строке заголовка. Это удобно, если у вас есть форма без полей.
Эта статья о CodeProject демонстрирует одно возможное решение для реализации этого:
http://www.codeproject.com/KB/cs/DraggableForm.aspx
Обычно создается потомок типа Form, в котором обрабатываются события мыши вниз, вверх и движение.
А вот аналогичное решение, описанное в видеоуроке:
http://www.youtube.com/watch?v=tJlY9aX73Vs
Я бы не позволил перетаскивать форму, когда пользователь нажимает на элемент управления в указанной форме. Пользователи получают разные результаты, когда нажимают на разные элементы управления. Когда моя форма внезапно начинает двигаться из-за того, что я щелкнул список, кнопку, метку и т. Д. это сбивает с толку.
источник
Как уже упоминалось @ fjch1997 , удобно реализовать поведение. Вот она, основная логика такая же , как в @ loi.efy в ответ :
Использование:
источник
Это все нужно!
источник
Самый полезный метод, как для WPF, так и для окон, пример WPF:
источник
источник
источник