2009-04-23 6 views
8

텍스트 상자의 자동 완성을 다시 시도하는 사용자 지정 UserControl이 있습니다. 사용자가 입력 할 때 텍스트는 제공된 항목 모음을 필터링하는 데 사용되며 팝업은 사용자가 입력 한 항목과 일치하는 항목이있는 ListBox를 표시합니다.다른 창에 포커스가있을 때 팝업 컨트롤 숨기기

불행히도 사용자가 응용 프로그램에서 다른 창 (브라우저, MSWord, anything!)으로 전환하기로 결정하면 팝업은 다른 모든 창 위에 계속 표시됩니다!

또한 팝업 창이 열린 상태에서 내 윈도우 (사용자 정의 컨트롤을 호스팅하는)를 움직이면 팝업은 제자리에 유지되고 창을 따라 가지 않습니다! 다소 우스운 일이지만 분명히 받아 들일만한 행동은 아닙니다. 나는에 따르면 주위를 둘러 보았다하지만 2 년 :(

+0

2010 년 2 월 현재 WPF 자동 완성 상자에이 문제가 있습니다. ... ( –

답변

13

사실 나는 true으로 설정된 팝업의 StaysOpen 속성을 가지고 있다는 것을 몰랐다.

<Popup StaysOpen="False" /> 

실제로 나를위한 속임수입니다.

0

에 대한 답이 가서 이것에 대해 하나 개의 게시물을 발견 한 Popup documentation : 팝업이 화면에 표시되면

, 그 자체를 경우 위치를 변경하지 않습니다 그 부모.

을 재배치 그래서 자동 완성 텍스트 상자를위한 아주 좋은 후보가 될 것처럼은 보이지 않는다. 나는 클래스가 더 당신이 항목 위에 마우스를 가져 가면 정보를 표시위한 것입니다 생각합니다.

+1

ComboBox는 팝업을 사용하며 ComboBox가 이동하면 그대로 유지됩니다. – Schneider

4

비슷한 시나리오에서 같은 문제가있었습니다. 내가 한 일은 컨트롤의 모든 "잃어버린 포커스"이벤트에 가입하고 컨트롤을 호스팅하고 GotMouseCapture 및 LocationChanged 이벤트에 가입 한 윈도우를 얻었습니다. 이러한 모든 이벤트의 이벤트 핸들러는 팝업의 IsOpen 속성을 false로 설정합니다.

당신이 함께 호스팅 창을 얻을 수 있습니다 :

parentWindow = Window.GetWindow(this); 

다른 모든 코드는 단순히 같은 일을 이벤트에 가입을 많이합니다.

P. 나는 그것이 꽤나 최적의 해결책이라고 말하지 않고있다. 그러나 그것은 나를 위해 잘 작동한다.

관련 문제