У меня есть окно WPF, в котором я подписываться на мыши вниз события, когда пользователь щелкает в любом месте, даже за пределами окна:MouseDown событий прекратить огонь в окне WPF
void RightClickWindow_MouseDown(object sender, MouseButtonEventArgs e)
{
try
{
base.OnMouseDown(e);
Point mousePositionInApp = Mouse.GetPosition(this);
Point mousePositionInScreenCoordinates = PointToScreen(mousePositionInApp);
if (mousePositionInScreenCoordinates.X < Left || mousePositionInScreenCoordinates.X > Left + Width || mousePositionInScreenCoordinates.Y < Top || mousePositionInScreenCoordinates.Y > Top + Height)
{
Close();
}
}
catch { }
}
void RightClickWindow_Activated(object sender, EventArgs e)
{
Mouse.Capture(this, CaptureMode.SubTree);
}
Если щелчок вне границ , Я увольняю окно. Это хорошо работает, за исключением одного специального случая, который я пытаюсь исправить, но не могу понять, как это сделать. Вот где он перестает работать:
У меня есть простой WPF Button
в XAML. Если я щелкнул левой кнопкой мыши по этой кнопке, и пока мышь не работает, я перетаскиваю курсор за пределы рамки, а затем отпускаю левую кнопку мыши, эти события захвата больше не срабатывают. Почему это, и как я могу исправить свой код для этого особого случая?
Вы имеете в виду, что они больше не стреляют в случае, когда вы отпускаете кнопку, или что они больше не срабатывают * когда-либо *? – furkle
Они больше не стреляют * никогда *. – Alexandru
проблема заключается в том, что ваше окно теряет захват мыши. Чтобы воспроизвести вашу проблему, у нас есть другие способы, такие как попытка сосредоточиться на любых элементах внутри вашего окна, а затем попробовать щелкнуть за окном, он не будет закрыт, как ожидалось, потому что потерян захват мыши. Я думаю, вы не должны пытаться делать что-то подобное, его поведение очень ненадежно. Когда ваше окно имеет захват мыши все время, вы не можете нормально обрабатывать панель заголовка (не можете взаимодействовать с ним). Сначала вы должны сфокусировать некоторый элемент в своем окне, прежде чем сможете перетащить панель заголовка. Затем окно теряет захват мыши ... –