Чтобы реализовать стыковку, я полагался на прослушивание события Window.LocationChanged, чтобы обнаружить изменяющуюся позицию окна, перемещаемого по экрану. Но пользователь сообщил, что док-станция не работает на своей машине.LocationChanged не надежно вызывается при перетаскивании окна
Оказывается, они отключили «Показывать содержимое окна при перетаскивании» в параметрах производительности Windows, и в результате событие LocationChanged запускается только после того, как окно переместится в конечную позицию, а не пока окно находится в середине полета.
Мне было интересно, был ли альтернативный способ обнаружения движений окна, хороший способ. Я знаю, что смогу приколоть или подключить какой-то ужасный таймер, но я надеялся на лучший способ, возможно, есть надежное событие для прослушивания?
Здесь вы можете предотвратить любые «вы не отправляли код»/«что вы пробовали».
protected override void OnLocationChanged(EventArgs e)
{
}
Я не знаю ни одного WPF API для обнаружения, когда окно движется в этих условиях. '[Preview] MouseMove' не срабатывает, когда мышь находится над неклиентской областью, и, как вы заметили, функция« LocationChanged »срабатывает при перетаскивании, если« отображать содержимое окна при перетаскивании ». Вам, вероятно, придется сделать p/invoke или, наоборот, нарисовать собственный хром (но даже это может не сработать, если вы вызовете DragMove для обработки перетаскивания окон). Кроме того, проверка состояния мыши не охватывает все движения окна - вы можете инициировать и завершать перенос окон, используя только клавиатуру. –
*** Я знаю, что могу выплеснуть ***, поэтому просто сделай так. Я не думаю, что здесь есть что-то лучшее. Также pinvoke не является чем-то плохим, это на самом деле иногда единственное решение, которое у вас есть. –