如何在网格行上删除以前更新的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元素,当选择改变事件显示只是,

如何在网格行上删除以前更新的UIElement以添加新的UIElement

你的布局应该是这样的:

<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>

您不必担心要删除多少控件,因为您只需删除/替换单个网格。