2017-03-02 10 views
0

내 응용 프로그램에 AlwaysOnTop 동작이 있으며 마우스를 놓을 때 포커스를 잃고 싶습니다. 상황에 맞는 메뉴가있는 버튼이 있습니다. 문제는 현재는 A ContextMenu가 자동으로 마우스가 내 방 창문의 자식에 여전히 경우에도,가 터 MouseLeave 이벤트가 열립니다, 그것은 바로 내가 시도ContextMenu가 열릴 때 MouseLeave가 발생합니다.

private void This_MouseLeave(object sender, MouseEventArgs e) 
{ 
    if (!this.IsMouseOver) 
    { 
     OtherExternalWindow.Focus(); 
    } 
} 

다른 외부 응용 프로그램에 포커스를 설정하기 때문에 종료 마우스가 끝나지 않은 경우 검사를 추가하지만 컨텍스트 메뉴가 내 창 (?)의 하위 항목으로 간주되지 않는 것 같습니다. 나는 이것이 모든 ContextMenus의 이름을 지정하고 그것들 중 어떤 것이 열려 있는지를 확인함으로써 성취 될 수 있다고 생각하지만, 다른 방법으로 불가능하지 않다면이 접근법을 피하고 싶습니다.

마우스를 놓을 때 포커스를 전환하는 방법은 있지만 상황에 맞는 메뉴 동작을 중단하지 않으려면 어떻게해야합니까?

+0

ContextMenu가 창 자식이 아닙니다. 그것은 일종의 창문입니다. 따라서 마우스가 ContextMenu 위로 이동하면 실제로는 창을 벗어납니다. – mm8

답변

0

ContextMenu에서 포커스를 얻고 싶지 않아서 MenuItems와 같은 내부 요소 인 Focusable="false"을 설정하면 안됩니다.

<Button Content="BBBB"> 
    <Button.ContextMenu> 
     <ContextMenu Focusable="False"> 
      <MenuItem Header="AAAA" Focusable="False"/> 
     </ContextMenu> 
    </Button.ContextMenu> 
</Button> 
+0

이것은 나를 위해 작동하지 않습니다. MouseLeave 이벤트가 여전히 트리거되어 컨텍스트 요소에서 포커스를 벗어납니다. – dotnetzen