2014-11-01 1 views
0

나는 심지어 윈도우의 외부 사용자가 어디서든 클릭 할 때의 이벤트 아래로 마우스에 가입하는 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); 
} 

을 나는 창문을 닫는다. 이것은 하나의 특수한 경우를 제외하고는 잘 작동하지만 수정 방법을 알 수는 없습니다. 다음은 작동이 멈춘 곳입니다.

XAML에 간단한 WPF Button이 있습니다. 이 단추를 마우스 왼쪽 단추로 누르고 마우스를 놓은 상태에서 단추 경계 밖으로 커서를 끈 다음 마우스 왼쪽 단추를 놓으면 이러한 캡처 이벤트가 더 이상 실행되지 않습니다. 왜 그런가요?이 특별한 경우를 위해 코드를 수정하려면 어떻게해야합니까?

+0

버튼을 놓을 때 더 이상 발사하지 않거나 더 이상 발사하지 않는 것을 의미합니까? – furkle

+0

더 이상 발사되지 않습니다. – Alexandru

+0

문제는 윈도우가 마우스 캡처를 잃어 버리는 것입니다. 문제를 재현하기 위해 창 내부의 요소를 초점을 맞추고 창 외부를 클릭하는 등의 다른 방법이 있습니다. 마우스 캡처가 손실되어 예상대로 닫히지 않습니다. 이런 일을해서는 안된다고 생각합니다. 그 행동은 매우 신뢰할 수 없습니다. 창에 항상 마우스 캡처가 있으면 제목 표시 줄을 정상적으로 처리 할 수 ​​없습니다 (상호 작용할 수 없음). 먼저 제목 표시 줄을 끌기 전에 창의 일부 요소를 집중시켜야합니다. 그러면 창문이 마우스 캡처를 잃어 버립니다 ... –

답변

1

Button을 클릭하면 Window이 마우스 캡처를 잃어 버려 MouseDown 이벤트가 다시 호출되지 않습니다. 시나리오에 따라 Deactivate 이벤트를 종료해야합니다.

+1

이렇게 간단히 Deactivated 이벤트를 무시하고 닫기 만하면됩니다. 정말 고마워! 물론, OnClosing 이벤트를 오버라이드하여 윈도우가 닫히지 않았는지 확인하기 위해 동시성 검사를 추가해야했지만 아무것도 아니 었습니다. :) – Alexandru

관련 문제