如何在网格行上删除以前更新的UIElement以添加新的UIElement
本文关键字:UIElement 更新 添加 删除 网格 | 更新日期: 2023-09-27 18:17:01
我在silverlight中工作,我有一个名为"bigGrid"的网格,其中包含三行,在第一行我有combobox和我更新两个UI元素在加载combobox(我的意思是第二行bigGrid(因为bigGrid是所有的父)或rowGrid的第一和第二行在我的代码)。
现在在组合框的selectionChanged事件中,我必须将之前呈现的UI元素替换为从组合框中选择的UI元素(如果元素是一个,它将显示在一行上,如果UI元素是两个,它们将依次显示在两个不同的行上)
现在的问题?:问题在当我加载组合框的网格是初始化的两个元素在2行。但在selectionchanged事件,当我渲染2个ui元素,然后它的工作很好为2个ui元素(它取代了加载的事件在两行的先前渲染。但问题是,当我在第一行只显示1个UIElement ,因为我最近渲染的UIElement在选择改变事件毫无疑问是在第一行更新,但第二行的UI元素(从组合框加载甚至仍然存在)。
如何删除这个先前持久的UI元素
我的代码(请注意,我只给出了有用的代码。当然,combe是在某处声明的,它也有Items)
public Grid somefunction() //this function returs the final bigGrid (which contains all the ROWS CONATINING ui ELEMNTS)
{
cmb.Loaded += (o3, e) =>
{
foreach (object o in pv.Root.Parameter)
{
param = (Parameter)o;
if (o is Parameter)
{
rowGrid = IntializeUIElements(param, atrbt);
}
Grid.SetRow(rowGrid, loopCount);
}
bigGrid.Children.Add(rowGrid);
loopCount++;
};
cmb.SelectionChanged += (o1, e) =>
{
string selectedComboItem = cmb.SelectedItem.ToString();
Grid storeRowGrid = new Grid();
for (int i = 0; i < pv.Root.Parameter.Count; i++)
{
storeRowGrid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
}
int count = 0;
foreach (object o in pv.Root.Parameter)
{
if (o is Parameter)
{
rowGrid = IntializeUIElements(param, atrbt); //It returns the grid with UI element
Grid.SetRow(rowGrid, count);
storeRowGrid.Children.Add(rowGrid);
Grid.SetRow(storeRowGrid, count);
if (bigGrid.Children.Count > 1)
{
bigGrid.Children.RemoveAt(bigGrid.Children.Count - 1); //this is to remocve previous item on selection change
}
count++;
}
}
bigGrid.Children.Add(storeRowGrid);
};
Grid.SetColumn(cmb, 1);
comboRowGrid.Children.Add(cmb);
Grid.SetRow(comboRowGrid, 0);
bigGrid.Children.Add(comboRowGrid); //This BigGrid is parent Grid.
return bigGrid;
}
如何清除第二行加载事件的上一个UI元素,当选择改变事件显示只是,
你的布局应该是这样的:
<Grid>
<ComboBox Grid.Row="0"/>
<SomeControl Grid.Row="1"/>
<SomeOtherControl Grid.Row="2"/>
...
</Grid>
如果你把它变成这样:
<Grid>
<ComboBox Grid.Row="0"/>
<Grid x:Name="grid with controls chosen by the Combobox selection" Grid.Row="1">
<SomeControl Grid.Row="0"/>
<SomeOtherControl Grid.Row="1"/>
</Grid>
...
</Grid>
您不必担心要删除多少控件,因为您只需删除/替换单个网格。