You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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++;
}

关键说明

  1. 根容器的作用:垂直方向的LayoutGroup作为所有GroupBox的父容器,会强制子元素垂直堆叠,覆盖LayoutControl默认的水平排列行为。
  2. 内部与外部布局区分:你设置的layoutGroup.Orientation = Vertical是控制当前GroupBox内部元素(即ComboBox)的排列方向,和多个GroupBox之间的排列无关,可保留原设置。
  3. XAML预定义根容器(可选):如果你的XAML中已经定义了垂直方向的根LayoutGroup,可直接在代码中获取该容器,无需判断创建,示例XAML结构如下:
<dxlc:LayoutControl x:Name="layoutItems">
    <dxlc:LayoutGroup Orientation="Vertical">
        <!-- 原有GroupBox放置于此 -->
    </dxlc:LayoutGroup>
</dxlc:LayoutControl>

内容的提问来源于stack exchange,提问作者user1845777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:40:41