每个元素都是StackPanel(带有Image后跟TextBlock)。
所以这个页面xaml就像:
<stackpanel> <textbox /> <scrollviewer> <grid 22x4 /> </scrollviewer> </stackpanel>
我已经这样做了所以我可以滚动网格而不会使顶部文本框滚动。
我现在想要的是在文本框上实现textchange事件,以便过滤这些元素。例如,有3个元素的名称以字母“z”开头,所以当我在文本框中键入“z”时,我想要的是所有名称都不以“z”开头的元素将其可见性更改为“折叠”和将所有以'z'开头的那些移动到第一行和第一列。
但是如何在代码中访问这些元素?如果我有网格对象,什么方法返回元素列表,如果有,我可以操纵它们?
另外,这是最好的方法吗?我认为它的方式对于移动应用程序可能有点开销,欢迎任何提示。
感谢。
答案 0 :(得分: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;
}
}