获取网格中的所有元素并更改其属性

时间:2011-11-01 17:21:46

标签: silverlight xaml windows-phone-7

我有一个相当大的windows phone silverlight网格,大约4 x 22个元素(4列,22行),我试图实现一个动态更改这些元素的属性及其在网格中的位置的搜索框。 / p>

每个元素都是StackPanel(带有Image后跟TextBlock)。

所以这个页面xaml就像:

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

我已经这样做了所以我可以滚动网格而不会使顶部文本框滚动。

我现在想要的是在文本框上实现textchange事件,以便过滤这些元素。例如,有3个元素的名称以字母“z”开头,所以当我在文本框中键入“z”时,我想要的是所有名称都不以“z”开头的元素将其可见性更改为“折叠”和将所有以'z'开头的那些移动到第一行和第一列。

但是如何在代码中访问这些元素?如果我有网格对象,什么方法返回元素列表,如果有,我可以操纵它们?

另外,这是最好的方法吗?我认为它的方式对于移动应用程序可能有点开销,欢迎任何提示。

感谢。

1 个答案:

答案 0 :(得分:3)

我不完全明白你想如何过滤你的网格元素是什么样的。但我的示例显示了过滤所有网格元素的方法,更改了Grid.RowGrid.ColumnVisibility属性。

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;                  
  }
}