2011-11-01 1 views
0

약 4 x 22 요소 (4 열 22 행) 크기의 윈도우 전화 실버 그리드가 있고 동적으로 속성을 변경하는 검색 상자를 구현하려고합니다. 그리드에서의 요소와 위치.그리드의 모든 요소 가져 오기 및 속성 변경

각 요소는 StackPanel (Image와 TextBlock이 뒤 이은)입니다.

<stackpanel> 
    <textbox /> 
    <scrollviewer> 
     <grid 22x4 /> 
    </scrollviewer> 
</stackpanel> 

그래서 내가 너무 상단 텍스트 상자 스크롤을하지 않고 그 격자를 스크롤 할 수 있습니다 이런 식으로 일을 필자 :

그래서이 페이지의 XAML은 같은입니다.

내가 지금 원하는 것은 텍스트 상자에 textchange 이벤트를 구현하여 해당 요소를 필터링하는 것입니다. 예를 들어 문자가 'z'로 시작하는 3 개의 요소가 있으므로 텍스트 입력란에 'z'를 입력하면 'z'로 시작하는 모든 요소가 '붕괴'로 바뀌고 'z'로 시작하는 모든 문자를 첫 번째 행과 열로 이동하십시오.

하지만 코드에서 이러한 요소에 어떻게 액세스 할 수 있습니까? 내가 그리드 객체를 가지고 있다면, 어떤 메소드가 엘리먼트의리스트를 반환한다면 어떤 것들이 그들을 조작 할 수 있는가?

도 이것을 수행하는 가장 좋은 방법입니까? 모바일 응용 프로그램의 경우 약간의 오버 헤드가있을 수 있으므로 모든 팁을 환영합니다.

감사합니다.

답변

3

필자는 필터링 방법과 그리드 요소가 어떤 종류인지 정확하게 알지 못합니다. 하지만 내 예제에서는 모든 그리드 요소를 필터링하는 방법을 보여줍니다. Grid.Row, Grid.Column, Visibility 속성을 변경하십시오.

private void Filter(Grid grid, string text) 
{ 
    var cur = 0; 
    var columnCount = grid.ColumnDefinitions.Count; 

    foreach (var child in grid.Children) 
    { 
    var name = child.GetValue(NameProperty) == null ? child.GetValue(NameProperty).ToString() : ""; 
    if (name.StartsWith(text)) 
    { 
     child.Visibility = Visibility.Visible;   
     child.SetValue(Grid.RowProperty, cur/columnCount); 
     child.SetValue(Grid.ColumnProperty, cur % columnCount); 
     cur++; 
    } 
    else   
     child.Visibility = Visibility.Collapsed;     
    } 
} 
+0

감사합니다. 이것은 내가 찾고 있었던 것이 었습니다. 내 유일한 두려움은 모바일 애플리케이션에 너무 무거울 수도 있지만 테스트에서 알 수 있습니다. 감사. – sap

관련 문제