我在silverlight工作,我有一个名为“bigGrid”的网格,其中包含三行,在第一行我有组合框,我在两个不同的行上更新两个UI元素加载comboBox(我的意思是第二行bigGrid)因为bigGrid是我所有的父节点或者代码中的第一行和第二行rowGrid。)
现在在combobox的selectionChanged事件中,我必须用从组合框中选择的UI元素替换先前渲染的UI元素(如果UIelement是一个,它将显示在一行上,如果UI元素是两个,它们将被显示在一个接一个的两个不同的行上(请注意,在加载此组合框时,我连续2行显示2个UI元素。)
现在问题?:当我加载组合框时,网格中的两个UIelement已初始化。但是在Selectionchnaged事件中,当我渲染2个元素时,它会因2个UIElements而被罚款(它取代了之前两行上Loaded事件的渲染。但问题是当我在第一行只显示1个UIElement时,因为选择更改事件的最近发送的uiElement无疑在第一行更新,但第二行的UI元素(从组合框加载甚至仍然存在)。
如何删除这个以前持久存在的UI元素?
我的代码(请注意我已经给出了有用的代码。当然comc在某处被声明,并且它也有项目)
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;
}
当选择更改事件时,如何清除第二行上的Loaded事件的先前UI元素 &安培;第一排中的元素?
答案 0 :(得分:1)
你的布局是这样的:
<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>
您不必担心要移除多少个控件,因为您只需删除/替换单个网格。