2011-07-29 4 views
1

에서 자동 완성 상자의 드롭 다운 목록을 닫는 방법 어쨌든 프로그래밍 방식으로 자동 완성 상자의 드롭 다운 목록을 닫으시겠습니까? 나의 유스 케이스는 다음과 같다.Windows phone 7

MainPage.xaml은 SearchPage.xaml (즉 /SearchPage.xaml?query=someText)에 값을 전달합니다.

SearchPage.xaml.cs에, 내가 설정,이 시점에서

autoCompleteBox.Text = NavigationContext.QueryString["query"]. 

는 제안 경기의 드롭 다운 목록이 표시됩니다. 페이지를 탐색 할 때이 동작을 원하지 않습니다.

또한 다음을 시도하여 드롭 다운 목록을 닫았지만 도움이되지 않았습니다.

autoCompleteBox.Text = NavigationContext.QueryString["query"]; 
autoCompleteBox.IsDropDownOpen = false; 

드롭 다운 목록은 초점을 맞추고을 잃을 때 멀리 AutoCompleteBox에서 갈 것 같다,하지만 난 속성/필드가 포커스를 잃을 수 있도록 설정하는 표시되지 않습니다.

어떤 도움을 주시면 감사하겠습니다.

글쎄, 나는 조금 어설프게하고 kludge를 내놓았다. SearchPage.xaml.cs의 생성자에 다음 코드가 있습니다.

autoCompleteBox.TextFilter += DummyFilter; 
autoCompleteBox.GotFocus += (s,args) => { 
if(!isAutoCompleteBoxInit) { 
    autoCompleteBox.TextFilter -= DummyFilter; 
    autoCompleteBox.TextFilter += RealFilter; 
} 
} 

더미 필터는 다음과 유사합니다.

bool DummyFilter(string search, string value) { return false; } 

RealFilter는 다음과 같습니다. 난 [ "쿼리"] = autoCompleteBox.Text NavigationContext.QueryString 설정 어디에 OnNavigatedTo 방법에서

bool RealFilter(string search, string value) { 
if(null != value) return value.ToLower().StartsWith(search.ToLower()); 
} 

이다. 그래서 지금이 작업을 수행 할 때 DummyFilter는 항상 false를 반환하므로 드롭 다운 목록이 사라집니다. 사용자가 AutoCompleteBox에 집중할 때 올바른 필터가 이미 TextFilter 속성에 연결되어 있는지 확인한 다음 그렇지 않은 경우 스위치를 수행합니다.

여러분 중 일부분에게 도움이되기를 바랍니다.

답변

2

페이지에 다른 컨트롤이 있습니까? 초점을 다른 곳으로 설정하면 문제를 해결해야합니다.

+0

아니요. 작동하지 않았습니다. TextBlock을 추가하고 디자인 타임에 축소되도록 가시성을 설정합니다. 페이지를 탐색 할 때 TextBlock.Focus()를 호출하면 전혀 도움이되지 않습니다. 그것이 나를 위해 일하는 유일한 방법은 내가 위에서 말한 것입니다. – jake

+0

@ user373312 비주얼 트리에서 제거되면서 축소 된 것에 포커스를 설정할 수 없습니다. –

+0

this.Focus()를 사용하여 전체 페이지에 포커스를 설정 했습니까? –

0

AutoCompleteBox의 텍스트를 변경하면 드롭 다운이 열립니다. 사용자가 텍스트를 변경하고 일치하는 경우에만 드롭 다운이 닫힙니다.

userInitiated를 true로 변경하면 일치하는 항목이 있으면 드롭 다운이 종료됩니다.

private void UpdateTextCompletion(bool userInitiated) 
    { 
     userInitiated = true; ...