我需要开发一个类似于Windows 8 Start屏幕的结构。我有一个方法,我打电话来填充我的RecordTile
。方法就像,
public static void fnShowTiles(List<RecordTile> objList, Grid objGrid) // objGrid is root Grid which holds this structure
{
try
{
// copy the list into local variable
List<RecordTile> objListOfTiles = objList.ToList<RecordTile>();
int nColumnsCount = -1;
objGrid.Children.Clear();
objGrid.ColumnDefinitions.Clear();
StackPanel objPanel = new StackPanel();
int nOriginalListCount = objListOfTiles.Count;
int nRowsToRender = 4;
while (objListOfTiles.Count > 0)
{
// add new column to the grid
objGrid.ColumnDefinitions.Add(new ColumnDefinition());
nColumnsCount += 1;
// add new stackpanel to newly added column
objPanel = new StackPanel();
objGrid.Children.Add(objPanel);
Grid.SetColumn(objPanel, nColumnsCount);
// add elements to stackpanel
int i = 0;
while (i < nRowsToRender)
{
if (objListOfTiles.Count > 0)
{
// add first element and remove it from list, so that next element will be first
RecordTile tile = objListOfTiles.First();
objPanel.Children.Add(tile); // exception occurs here
objListOfTiles.Remove(tile);
i++;
}
else
{
// if while adding elements, list finishes, then break the loop
break;
}
}
}
}
这适用于第一次加载。我在同一页面上有一个SearchBox
来加载这些图块。当我过滤Tiles(基于搜索字符串)并将新的tile列表传递给函数时,它会抛出异常。
我经历了很多帖子。他们建议从父母那里删除元素。我每次都要清理网格的孩子们。什么一定出错?
答案 0 :(得分:0)
正如@Rawling建议的那样,在StackPanel
之前从objGrid.Children.Clear();
清除Tiles是解决方案。在该声明之前添加了以下代码,它就像魅力一样。
foreach (StackPanel panel in objGrid.Children)
{
panel.Children.Clear();
}
答案 1 :(得分:0)
错误很明显:WPF / SL控件一次只能属于1个父控件。也可以尝试。
/login.aspx