【问题标题】:Getting all elements in a Grid and change their properties获取 Grid 中的所有元素并更改其属性
【发布时间】:2011-11-01 17:21:46
【问题描述】:

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

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

所以这个页面 xaml 类似于:

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

我已经这样做了,所以我可以滚动该网格,而无需使顶部文本框也滚动。

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

但是我怎样才能在代码中访问这些元素呢?如果我有网格对象,什么方法返回元素列表(如果有的话)以便我可以操作它们?

另外,这是最好的方法吗?在我看来,移动应用程序可能有点开销,欢迎任何提示。

谢谢。

【问题讨论】:

    标签: silverlight xaml windows-phone-7


    【解决方案1】:

    我不完全了解您要如何过滤以及您的网格元素是什么类型。但我的示例展示了过滤所有网格元素的方法,更改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;                  
      }
    }
    

    【讨论】:

    • 非常感谢,这正是我想要的。我唯一担心的是它对于移动应用程序来说可能太重了,但测试会证明这一点。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2021-04-17
    • 2019-09-14
    • 2012-04-05
    • 1970-01-01
    相关资源
    最近更新 更多