Como posso capturar eventos do mouse que ocorrem fora de uma janela (WPF)?
eu tenho umWindow
elemento que temWindowStyle="None"
eAllowsTransparency="True"
, portanto, não tem barra de título e suporta transparência.
Eu quero que o usuário seja capaz de mover a janela para qualquer posição na tela, clicando com o botão esquerdo em qualquer lugar dentro da janela e arrastando. A janela deve arrastar junto com o mouse enquanto o botão esquerdo do mouse estiver pressionado.
Consegui que essa funcionalidade funcionasse com uma exceção: quando o mouse se move para fora da janela (por exemplo, quando o botão esquerdo do mouse é pressionado perto da borda da janela e o mouse é movido rapidamente), a janela não mais captura a posição do mouse e não arrasta junto com o mouse.
Aqui está o código do code-behind que eu uso para fazer o trabalho:
public Point MouseDownPosition { get; set; }
public Point MousePosition { get; set; }
public bool MouseIsDown { get; set; }
private void window_MyWindowName_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MouseDownPosition = e.GetPosition(null);
MouseIsDown = true;
}
private void window_MyWindowName_MouseMove(object sender, MouseEventArgs e)
{
if (MouseIsDown)
{
MousePosition = e.GetPosition(null);
Left += MousePosition.X - MouseDownPosition.X;
Top += MousePosition.Y - MouseDownPosition.Y;
}
}
private void window_MyWindowName_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
MouseIsDown = false;
}