2010-06-17 3 views
1

주 응용 프로그램의 뒤에 모달 대화 상자가 나타나 정지 상태가되는 wpf 응용 프로그램에 문제가 있습니다.WPF 응용 프로그램의 모달 대화 상자 포커스 문제

대부분의 경우 팝업이 올바르게 작동하고 앞에 표시되지만 뒤에서 팝업되어 일부 상호 작용이 중단되는 경우가 종종 있습니다. 이 경우 작업 표시 줄을 사용하여 대화 상자를 닫을 수 있습니다. 많은 응용 프로그램이 열려 있고 작업 표시 줄이 꽉 찼을 때 일반적으로 발생하는 것으로 나타났습니다. 또한, 두 개의 화면으로 작업하고 있는데 문제는 작업 표시 줄이있는 화면에서만 발생합니다 - 매우 이상합니다!

대화 상자는 삽입 된 사용자 정의 컨트롤을 데이터 컨텍스트로 포함하는 창 컨트롤입니다. 이 문제를 일으킬 수있는 어떤


private static Window GetOwner() 
{ 
    if (Application.Current != null) 
    { 
     var owner = Application.Current.Windows.Cast().FirstOrDefault(w => w.IsActive); 
     return owner ?? Application.Current.MainWindow; 
    } 
    return null; 
} 

어떤 아이디어 : ShowDialog를(), 응용 프로그램의 첫 번째 활성 창 대신 Window.GetWindow (이)가 사용됩니다 호출하기 전에 윈도우의 소유자를 설정하려면? 또는 심지어 그것을 시도하고 추적 할 수 있도록 어떻게하면 더 많은 정보를 수집 할 수 있습니까?

덕분에, DONAL

+0

할당 직후 "소유자"의 가치는 무엇입니까? 일관되게 동일합니까? – Robaticus

답변

0

가끔 효과를 점멸로 번역하여 Windows Form 응용 프로그램에 초점 문제에서 있었다. 그 이유는 사람들 중 하나가 코드가 모달 창을 숨기기 위해 수정 될 때까지 표시 되었기 때문에 추악한 어두운 패치를 피할 수있었습니다! 그는 가장 위에있는 모달 창에서 .Hide()를 호출 한 이후에 포커스가 다른 응용 프로그램으로 이동하고 창을 완전히로드 할 때 .Show()를 호출하면 outoffocus & 또는 깜박임으로 포커스가 발생했습니다.

이 문제를 해결하고 불투명도를 변경하는 데 로직을 변경하는 데 오래 걸렸습니다. 나는 완전히로드 될 때까지 창을 투명하게 만들었다. 이것이 어떤면에서 도움이되는지 확인하십시오!

0

모달 창 열기 소유자 속성이 제대로 설정되지 않았기 때문에 방금 WPF 응용 프로그램과 유사한 문제가 발생했습니다. 대부분의 경우에는 다소 효과가 있었지만 여러 번 응용 프로그램 창 사이를 전환 할 때와 마찬가지로 모달 창을 뒤에서 붙잡을 수있었습니다.

나는이처럼 보였다 모달 창으로 내 자신이 ShowDialog() 메서드를 추가 :

public bool? ShowDialog(Window owner) 
    { 
     Owner = owner; 
     return ShowDialog(); 
    } 

을 그리고 그것을 보여주는 때 명시 적으로 소유하는 창에서 통과시켰다. 소유자 속성을 올바르게 설정하면 내 문제가 해결되었습니다.

아마도 Owner 속성을 올바르게 설정하지 않았습니까?