DevExpress WPF中动态创建带ComboBox的GroupBox如何垂直排列
解决方案:让新增的GroupBox垂直排列
问题出在你直接将LayoutGroup(作为GroupBox)添加到LayoutControl的Children集合中,而LayoutControl默认会水平排列直接子元素。要实现垂直排列,需要将所有GroupBox放入一个垂直方向的根LayoutGroup中,而非直接添加到LayoutControl。
修改后的代码
private void AddMaterialsBtn_Click(object sender, System.Windows.RoutedEventArgs e) { LayoutControl layoutControl = (LayoutControl)layoutItems; // 获取或创建垂直方向的根布局容器 LayoutGroup rootVerticalGroup = layoutControl.Children.OfType<LayoutGroup>() .FirstOrDefault(g => g.Orientation == Orientation.Vertical); if (rootVerticalGroup == null) { rootVerticalGroup = new LayoutGroup() { Orientation = Orientation.Vertical }; layoutControl.Children.Add(rootVerticalGroup); } LayoutGroup layoutGroup = new LayoutGroup() { Name = "Materials" + MaterialButtonCounter, Tag = "Materials" + MaterialButtonCounter, IsCollapsible = true, MinWidth = 300, HorizontalAlignment = System.Windows.HorizontalAlignment.Left, Orientation = System.Windows.Controls.Orientation.Vertical, // 此属性控制GroupBox内部元素排列,不影响外部 View = DevExpress.Xpf.LayoutControl.LayoutGroupView.GroupBox, }; ComboBox dimBox = new ComboBox() { Name = "rawMaterials" + MaterialButtonCounter, AllowRejectUnknownValues = true, AutoComplete = true, MaskAutoComplete = DevExpress.Xpf.Editors.AutoCompleteType.Optimistic, Width = 145, HorizontalAlignment = System.Windows.HorizontalAlignment.Left }; LayoutItem layoutItem = new LayoutItem() { Content = dimBox, Name = "RawMaterials" + MaterialButtonCounter, HorizontalAlignment = System.Windows.HorizontalAlignment.Left, Width = 220 }; layoutGroup.Children.Add(layoutItem); rootVerticalGroup.Children.Add(layoutGroup); // 将新GroupBox添加到垂直根容器中 MaterialButtonCounter++; }
关键说明
- 根容器的作用:垂直方向的
LayoutGroup作为所有GroupBox的父容器,会强制子元素垂直堆叠,覆盖LayoutControl默认的水平排列行为。 - 内部与外部布局区分:你设置的
layoutGroup.Orientation = Vertical是控制当前GroupBox内部元素(即ComboBox)的排列方向,和多个GroupBox之间的排列无关,可保留原设置。 - XAML预定义根容器(可选):如果你的XAML中已经定义了垂直方向的根
LayoutGroup,可直接在代码中获取该容器,无需判断创建,示例XAML结构如下:
<dxlc:LayoutControl x:Name="layoutItems"> <dxlc:LayoutGroup Orientation="Vertical"> <!-- 原有GroupBox放置于此 --> </dxlc:LayoutGroup> </dxlc:LayoutControl>
内容的提问来源于stack exchange,提问作者user1845777
相关产品推荐
相关产品推荐

