2010-06-26 8 views
0

나는 상황을 이해하지 못하고 가능한 한 나를 계몽하기를 원합니다.WPF 모달 창이 비정상적으로 동작합니다.

WPF 응용 프로그램을 만들었습니다. 간단하게하기 위해이 응용 프로그램을 하나의 창으로 간주하십시오. 이 창에 몇 가지 컨트롤을 넣고 다른 것들에는 TextBox 컨트롤이 있습니다 (TB라고 부름).

이 결핵에는 항상 초점이 있어야합니다 (사람이 무언가를 타자를 치거나 바코드 스캐너를 통해 읽은 경우 표시해야 함).

나는 이것을 타이머의 도움으로 구현할 것을 생각했다 : 초마다 초점이 TB로 전송된다.

지금까지 모든 것이 잘 작동합니다 (예상대로).

이상한 일은 다음과 같습니다. 새 사용자가이 창을 사용하여 로그인해야한다고 가정 해 봅시다.이 방법으로 새 ​​창 개체 (W2라고 부름)를 구현하는 것이 좋습니다.

W2.ShowDialog(); 

이 W2 창은 모달이어야합니다 (타이머가 계속 실행됨에 유의하십시오).

미친 것은 예상대로 윈도우 비스타에서이 완벽 를 작동되는 즉시, Windows XP에서 하지만 (이 W2는 모달이며 사용자가 그녀가 W2에 무엇을해야하는지에 수 있음을 의미합니다) 사용자가 W2 텍스트 상자에 포커스를 설정하면 초기 창에서 TB로 다시 설정됩니다 (해석 할 수있는 한 W2는 이 아니라 모달입니다.)? 맞습니까?).

이 상황을 어떻게 극복 할 수 있습니까?

이 방법이 맞습니까? 사전

답변

4

에서

덕분에 메인 창에 W2의 Owner property을 설정해야합니다. 참조 문서에서

는 :

당신이 ShowDialog를 호출하여 자식 창을 열고, 당신은 또한 자식 윈도우의 소유자 속성을 설정해야합니다.

+0

솔직히 : 나는 이것을 설정하지 않았습니다. 내 생각 엔 당신이 맞다! 이것은 누락 된 부분이어야합니다. 그러나 다른 측면 : Windows Vista에서 작동하는 이유는 무엇입니까? –

+0

@Sawas : @Sawas : 어떤 이유로 XP에서 정확히 동일하게 동작하지 않는 것 같습니다. Vista/7에서는 설정하지 않으면 문제가 발생하지 않습니다 (기술적으로도 설정해야 함) –

1

이 설정은 포커스 백백 초가 적당합니다. 어떤 입력은 잃어버린 상태와 포커스 상태 사이의 간격으로 올 수 있습니다 (손실 될 수도 있음). 양자 택일 해결책은 결핵이 거주하는 모양에 PreviewKeydown 사건을 붙잡고 TBC에 barcanner의 산출을 어떻게 든 놓는다.

+0

Thanks 나를이 방향으로 인도 해주었습니다. 이 기술을 사용하여 구현하는 방법을 살펴보아야합니다. +1! 다시 한번 감사드립니다. –

관련 문제