2014-05-02 44 views
0

我有一个wpf应用程序,我在其中使用wpf网格并为其动态添加/删除控件。添加控件是好的,但是在删除它们后,它们会从网格中消失,但是会留下空白的地方,这些空间会被其余元素占据,就像它们在包装面板中一样。在运行时删除元素时刷新WPF网格布局

此前我使用包装面板,它工作正常,但我需要在我的groupboxes中添加分隔控制,因此我用网格替换了wrappanel。

下面是窗口的截图

enter image description here

我取出中间组合框中并显示这样

enter image description here

我想要的第三组框占据第二的位置组框。 对于记录,我已经使用网格调整大小事件,这是它具有

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具有其中我们添加/删除元素动态网格的代码。

回答

0

您可以设置 <ColumnDefinition width="Auto" />

,并使用 Visibility="Collapsed"隐藏的列。

+0

ColumnDefinition宽度=“自动”解决了这个问题对我来说。 – MegaMind

+0

好:)只是要小心,你仍然可以使用标签来关注隐藏的控件。如果你有一些键盘操作,你应该做一些事情来防止它。 –

+0

如果我使用Column definition =“Auto”,但网格没有调整自身大小,元素会对齐。它也应该减小其宽度。 – MegaMind

0

我看不到你的问题......好像你在问'如何在代码中使用Grid控件?'。如果您想在运行时更改Grid.ColumnDefinitions(或任何其他Grid属性),那么为什么不这样做呢?如果您查看MSDN上的Grid Class页面,您会看到一个长代码示例,它将向您显示如何在代码中操作Grid。例如,你可以做这样的事情:

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