我有一个数字 1 到 10 的组合框,根据用户的选择,我的表单上应该显示许多用户控件。第一次加载表单时,组合框的值为 1,并且网格中只有一个用户控件 petdetails (它只有一行,并且在进行更改时添加了额外的列)。我的程序在此范围内工作正常,但是一旦用户添加了更高的值并由于某种原因减少了列,但最后一列中的控件重叠。(例如:用户选择了 6 ,6 个控件并添加了一次他将组合框中的值更改为 3,只剩下 3 列,但在第三列中,我可以看到用户控件 5,6 重叠)。我在这里粘贴我的代码,任何帮助将不胜感激。
private void cmbNoOfPets_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int i = Convert.ToInt32(((System.Windows.Controls.ContentControl)(cmbNoOfPets.SelectedValue)).Content);
int grdCols=Convert.ToInt32(grdPetDetails .ColumnDefinitions .Count.ToString ());
// check if the number of pets is more than the existing number in the grid if more start with adding at the next column
// if less start from the last decreasing till the number of columns required
if (i > grdCols)
for (int j = grdCols+1 ; j <= i; j++)
{
ColumnDefinition c = new ColumnDefinition();
c.Width = new GridLength(370, GridUnitType.Pixel);
grdPetDetails.ColumnDefinitions.Add (c);
PetDetails petdetails = new PetDetails();
petdetails.Name = "petDetails" + j ;
string str="Pet Number " + j + ":";
petdetails.lblPetNumber.Content = str;
Grid.SetRow(petdetails, 1);
Grid.SetColumn(petdetails, j - 1);
grdPetDetails.Children.Add(petdetails);
}
else if (i < grdCols)
for (int j = grdCols; j > i; j--)
{
PetDetails petdetails = new PetDetails();
petdetails.Name = "petDetails" + j;
grdPetDetails.Children.Remove(petdetails);
grdPetDetails.ColumnDefinitions.RemoveAt(j - 1);
}
}
我先删除控件,然后删除列定义,但不明白为什么会这样。
提前致谢。