Получение всех элементов в сетке и изменение их свойств. - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть сетка Silverlight для Windows Phone, которая довольно большая, около 4х22 элементов (4 столбца, 22 строки), и я пытаюсь реализовать окно поиска, которое динамически изменяет свойства этих элементов и их положение в сетке.

каждый элемент представляет собой StackPanel (с изображением, за которым следует текстовый блок).

, поэтому эта страница xaml выглядит примерно так:

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

iveсделал это так, чтобы я мог прокручивать эту сетку, не делая также верхнюю прокрутку текстового поля.

Теперь я хочу реализовать событие textchange для текстового поля, чтобы оно фильтровало эти элементы.например, есть 3 элемента, чье имя начинается с буквы «z», поэтому я хочу, чтобы при вводе «z» в текстовое поле, чтобы все элементы, чье имя не начиналось с «z», изменили свою видимость на «свернуть» ипереместите все те, которые начинаются с 'z', в первую строку и столбцы.

но как мне получить доступ к этим элементам в коде?если у меня есть объект сетки, какой метод возвращает список элементов, если таковые имеются, чтобы я мог ими манипулировать?

также, это лучший способ сделать это?На мой взгляд, для мобильного приложения это может быть немного накладно, любые советы приветствуются.

спасибо.

1 Ответ

3 голосов
/ 01 ноября 2011

Я не совсем понимаю, как вы хотите фильтровать и какие у вас элементы сетки.Но мой пример показывает способ фильтрации всех элементов сетки, изменения свойств 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;                  
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...