Skip to main content

Layout Containers

Vertical

Vertical is a layout container that stacks child elements vertically.

skin.xml Snippet:

<Vertical spacing="8" margin="10" attach="left right">
<!-- children stacked vertically -->
</Vertical>
Attribute NameDescriptionType
attachLayout attachment/alignment.token
heightExplicit height.number
marginInner padding around the container contents.number
optionsVisual or layout options.token
persistence.idPersistent layout state key.identifier
sizePosition and size geometry.tuple
sizelimitsDefines size limits.tuple
spacingSpace between children.number
widthExplicit width.number
nameContainer binding name.identifier
titleDisplay title.text
optionsDescription
adaptive-
hidepriority-
nohelp-
secondary-
unifysizes-

Horizontal

Horizontal is a layout container that arranges child elements horizontally.

skin.xml Snippet:

<Horizontal spacing="4" margin="5" attach="left right">
<!-- children arranged horizontally -->
</Horizontal>
Attribute NameDescriptionType
attachLayout attachment/alignment.token
heightExplicit height.number
marginInner padding around the container contents.number
optionsVisual or layout options.token
persistence.idPersistent layout state key.identifier
sizePosition and size geometry.tuple
sizelimitsDefines size limits.tuple
spacingSpace between children.number
widthExplicit width.number
columnsColumns in the layout.number
nameContainer binding name.identifier
styleStyle reference.identifier
titleDisplay title.text
tooltipTooltip text.text
optionsDescription
hidepriority-
unifysizes-
wrap-

View

View is a layout wrapper and positioned container.

skin.xml Snippet:

<View size="40,10,150,220">
<Vertical spacing="2">
...
</Vertical>
</View>
Attribute NameDescriptionType
attachLayout attachment/alignment.token
heightExplicit height.number
marginInner padding around container contents.number
nameWrapper name.identifier
optionsVisual or layout options.token
sizePosition and size geometry.tuple
sizelimitsDefines size limits.tuple
styleStyle reference.identifier
titleDisplay title.text
tooltipTooltip text.text
typeView subtype.identifier
widthExplicit width.number
optionsDescription
directupdate-
horizontalHorizontal orientation.
transparentTransparent rendering.
verticalVertical orientation.

Notes

  • View is used to position blocks of controls while inner Vertical and Horizontal containers handle local flow.

DialogGroup

DialogGroup

DialogGroup is a visible container for housing other elements.

skin.xml Snippet:

<Form name="DialogGroupExample" title="DialogGroup Example">
<DialogGroup title="Value Fields" width="220" height="100">
<Vertical margin="8" spacing="4">
<Label title="ValueBox and TextBox"/>
<ValueBox name="ValueText" width="140" height="22"/>
<TextBox name="DisplayText" width="180" height="22"/>
</Vertical>
</DialogGroup>
</Form>
Attribute NameDescriptionType
attachLayout attachment/alignment.token
heightExplicit height.number
optionsVisual and behavioral settings.token
sizePosition and size geometry.tuple
sizelimitsDefines size limits.tuple
styleStyle reference.identifier
titleDisplay title.text
widthExplicit width.number
optionsDescription
secondary-
transparentTransparent rendering.

Table

Table

Table is a grid layout container. Child elements are assigned to cells in source order, moving left to right across each row and then continuing on the next row.

skin.xml Snippet:

<Table columns="2" margin="0" spacing="6">
<Label title="Name"/>
<EditBox name="Name"/>

<Label title="Count"/>
<ValueBox name="Count"/>
</Table>
Attribute NameDescriptionType
attachLayout attachment/alignment.token
cellratioCell sizing ratio.number
columnsNumber of columns in the grid.number
heightExplicit height.number
marginInner padding around the table contents.number
nameTable binding name.identifier
sizeTable geometry.tuple
spacingSpace between cells.number
sizelimitsDefines size limits.tuple
widthExplicit width.number

Notes

  • Ex. With columns="2", children fill table in order of placement, top to bottom: row 1 col 1, row 1 col 2, row 2 col 1, row 2 col 2.
  • <Null/> can be used as an empty placeholder cell.

Space

Space is a lightweight layout spacer used to add fixed blank area between controls.

skin.xml Snippet:

<Vertical margin="0" spacing="8">
<Label title="Top Control"/>
<Space height="4"/>
<Label title="Bottom Control"/>
</Vertical>
Attribute NameDescriptionType
attachLayout attachment/alignment.token
nameSpace name.identifier
heightFixed spacer height.number
sizePosition and size geometry.tuple
sizelimitsDefines size limits.tuple
widthFixed spacer width.number

TabView

TabView

TabView is a multi-page container.

skin.xml Snippet:

<TabView name="OptionTabs" width="300" height="180">
<DialogGroup title="Tab 1">
<!-- tab content -->
</DialogGroup>
<Control title="Tab 2">
<!-- tab content -->
</Control>
<View title="Tab 3">
<!-- tab content -->
</View>
</TabView>
Attribute NameDescriptionType
attachLayout attachment/alignment.token
heightExplicit height.number
nameTabview binding name.identifier
optionsVisual or behavioral options.token
persistence.idPersistent layout state key.identifier
sizeExplicit size geometry.tuple
sizelimitsDefines size limits.tuple
styleStyle reference.identifier
widthExplicit width.number
optionsDescription
extendtabs-
fitallviews-
fontbold-
nohoveractivate-
reorder-

Notes

  • Confirmed page container types: DialogGroup, Control, View, Table.
  • Use each child page container title for the tab label.
  • A dropdown is added automatically when the tab strip exceeds available width.

Flexbox

Flexbox arranges children in a row or column with flexbox-style alignment, distribution, and sizing — similar to CSS Flexbox.

skin.xml Snippet:

<Flexbox flex.gap="10" width="500">
<Toggle name="opt1" title="One" width="100" height="30"/>
<Toggle name="opt2" title="Two" width="100" height="30"/>
<Toggle name="opt3" title="Three" width="100" height="30"/>
</Flexbox>

<Flexbox flex.direction="column" flex.align="center" flex.gap="5" width="500">
<Toggle name="top" title="Top" width="200" height="30"/>
<Toggle name="bottom" title="Bottom" width="200" height="30"/>
</Flexbox>

<Flexbox flex.justify="spacebetween" width="500">
<Button name="left" title="Left" width="80" height="30"/>
<Button name="center" title="Center" width="80" height="30"/>
<Button name="right" title="Right" width="80" height="30"/>
</Flexbox>

<Flexbox flex.gap="5" width="500">
<Toggle name="a" title="1/3" flex.grow="1" height="30"/>
<Toggle name="b" title="1/3" flex.grow="1" height="30"/>
<Toggle name="c" title="1/3" flex.grow="1" height="30"/>
</Flexbox>
Attribute NameDescriptionType
attachLayout attachment/alignment.token
flex.alignCross-axis alignment (like CSS align-items).token
flex.directionFlex direction — row or column.token
flex.gapSpacing between children.number
flex.justifyMain-axis distribution (like CSS justify-content).token
flex.marginMargin around the flex container.number
flex.paddingPadding inside the flex container.tuple
heightExplicit height.number
sizePosition and size geometry.tuple
tooltipTooltip text.text
widthExplicit width.number
flex.alignDescription
centerCenter children on the cross axis.
flex.directionDescription
rowHorizontal layout (default).
columnVertical layout.
flex.justifyDescription
centerCenter children on the main axis.
spacebetweenDistribute children evenly with space between.

Child attributes (flex-item):

AttributeDescriptionType
flex.growGrow factor for filling available space.number
flex.positiontypePositioning mode.token
flex.insetInset for absolute positioning.token
flex.positiontypeDescription
absolutePositions child outside flow layout.
flex.insetDescription
0Pins all edges, fills flex container.
.rightRight edge inset distance.
.bottomBottom edge inset distance.

Notes

  • Flexbox requires an explicit width (or size) for justify and grow features to distribute space measurably.
  • The default direction is row.
  • flex.padding uses a tuple top,right,bottom,left.

AlignView

AlignView wraps content and provides binding to the right-click context menu alignment options in EditAddIn panels.

skin.xml Snippet:

<AlignView name="://Workspace/studioapp/~/CustomParams/addInPanelAlign"
attach="left right fill">
<Horizontal spacing="5" margin="5" attach="all">
<Button name="btn1" title="Button 1"/>
<Button name="btn2" title="Button 2"/>
</Horizontal>
</AlignView>
Attribute NameDescriptionType
attachLayout attachment/alignment.token
heightExplicit height.number
nameHost parameter path for alignment state binding.path
optionsBehavior flags.token
persistence.idPersistent layout state key.identifier
sizePosition and size geometry.tuple
widthExplicit width.number
optionsDescription
horizontal-

Notes

  • The name="://Workspace/studioapp/~/CustomParams/addInPanelAlign" provides proper labels (Align Left/Center/Right); without it the menu shows raw values (0, 1, 2).
  • The passcontextmenu option adds AlignView context menu items; omit it for AddIn Panel.