C# 在运行时删除元素时刷新WPF网格布局

C# 在运行时删除元素时刷新WPF网格布局,c#,wpf,grid,dynamic-resizing,C#,Wpf,Grid,Dynamic Resizing,我有一个wpf应用程序,在其中我使用wpf网格并动态地向其添加/删除控件。添加控件很好,但在移除控件后,它们会从网格中消失,但会在其中留下空白位置,我希望被其他元素填充,就像它们在“包裹面板”中所做的一样 以前我使用的是wrap面板,它工作得很好,但我需要在我的GroupBox中添加拆分器控件,因此我用grid替换了wrappanel 这是窗口的截图 我移除中间的groupbox,它显示如下 我想让第三个groupbox取代第二个groupbox。 作为记录,我使用了grid resize事

我有一个wpf应用程序,在其中我使用wpf网格并动态地向其添加/删除控件。添加控件很好,但在移除控件后,它们会从网格中消失,但会在其中留下空白位置,我希望被其他元素填充,就像它们在“包裹面板”中所做的一样

以前我使用的是wrap面板,它工作得很好,但我需要在我的GroupBox中添加拆分器控件,因此我用grid替换了wrappanel

这是窗口的截图

我移除中间的groupbox,它显示如下

我想让第三个groupbox取代第二个groupbox。 作为记录,我使用了grid resize事件,这是它的代码

 foreach (var control in this.DynamicGrid.Children)
        {
            if (control.GetType() == typeof(GroupBox))
            {
                GroupBox groupBox = control as GroupBox;
                groupBox.Height = this.DynamicGrid.ActualHeight;
                this.WrapPanel1.Width = this.DynamicGrid.ActualWidth;
            }
        }
Wrappanel有动态网格,我们在其中添加/删除元素。

您可以设置

和使用
Visibility=“Collapsed”
隐藏列。

我看不到您的问题。。。似乎您在问“如何在代码中使用
网格
控件?”。如果您想在运行时更改
Grid.ColumnDefinitions
(或任何其他
Grid
属性),那么为什么不这样做呢?如果您查看MSDN上的页面,您将看到一个很长的代码示例,其中详细说明了如何在代码中操作
网格。例如,您可以这样做:

ColumnDefinition rightHandColumn = new ColumnDefinition();
YourGrid.ColumnDefinitions.Add(rightHandColumn);
YourGrid.Children.Add(uiElementCurrentlyInGrid);
YourGrid.SetRow(uiElementCurrentlyInGrid, 0);
YourGrid.SetColumn(uiElementCurrentlyInGrid, 1);
然后,要删除项目,请执行以下操作:

Grid.Children.Remove(uiElementCurrentlyInGrid);
Grid.ColumnDefinitions.Remove(rightHandColumn);

ColumnDefinition width=“Auto”为我解决了这个问题。很好:)请小心,您仍然可以使用tab来聚焦隐藏控件。若你们有一些键盘动作,你们应该采取一些措施来阻止它。若我使用Column definition=“Auto”,元素会对齐,但网格并没有自动调整大小。它也应该减小它的宽度。什么都没做?为了记录,我正在使用grid sizechanged事件。我已经在我的问题中添加了代码。