C#WPF WrapPanel问题

时间:2016-12-07 06:53:23

标签: c# wpf

有点难以解释,但我有一个WrapPanel,其中包含基于索引i显示的数据。索引i根据用户是否从ComboBox中选择内容而改变。问题是当用户从ComboBox中选择一个新选项时,新的换行/数据与前一个换行/数据重叠。我希望显示第一个初始包装,然后当SelectedIndex更改时,应隐藏前一个包装并显示基于新索引的新包装。这是一些示例代码:

private void fillColumns(int i, int colIndex, int rowIndex) //Called each time SelectedIndex is changed.
{
    System.Windows.Controls.WrapPanel wrap1 = new System.Windows.Controls.WrapPanel();
    wrap1.Orientation = System.Windows.Controls.Orientation.Vertical;
    wrap1.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
    wrap1.Margin = new Thickness(2, 2, 2, 2);

    System.Windows.Controls.TextBlock courseTextBlock = new System.Windows.Controls.TextBlock();
    courseTextBlock.Inlines.Add(new Run("Course: ") { Foreground = Brushes.Purple, FontWeight = FontWeights.Bold });
    courseTextBlock.Inlines.Add(returnedTable.Tables[0].Rows[i]["course_prefix"].ToString() + " " + returnedTable.Tables[0].Rows[i]["course_num"].ToString());
    courseTextBlock.Margin = new Thickness(2, 2, 2, 2);
    wrap1.Children.Add(courseTextBlock);

    Grid.SetColumn(wrap1, colIndex);
    Grid.SetRow(wrap1, rowIndex);
    tabGrid1.Children.Add(wrap1)
    //Clear WrapPanel after user chooses new ComboBox option?
}

1 个答案:

答案 0 :(得分:0)

有点不清楚这个代码是如何被调用的,以及变量colIndex和rowIndex如何与ComboBox相关,但假设i是正在改变它的变量,似乎问题是每次更改ComboBox选择时,除了已经存在于该单元格中的任何内容而不是替换它之外,基于行i的内容被添加到位置的网格单元格(colIndex,rowIndex)。

修改当前代码的最简单方法是在将wrap1添加到网格之前清除网格单元格。 e.g。

替换

tabGrid1.Children.Add(wrap1)

// Remove any existing content at this position in the grid
foreach (var existingContent in (from cell in tabGrid1.Children where Grid.GetRow(cell) == rowIndex && Grid.GetColumn(cell) == colIndex select cell).ToArray())
{
    tabGrid1.Children.Remove(existingContent);
}

// add the new content
tabGrid1.Children.Add(wrap1);

虽然这不是特别优雅,但动态设置或绑定TextBlock的内容比每次创建一个新内容更可取。