Я написал пользовательский элемент управления, который я использую, что делает это чрезвычайно простым, но прежде чем я его создал, я обычно использовал такой тип вещи:
<ControlTemplate x:Key="ColumnsTemplate" TargetType="HeaderedContentControl">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*" />
<ColumnDefinition Width="7*" />
</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="0" ContentSource="Header" />
<ContentPresenter Grid.Column="1" />
</Grid>
</ControlTemplate>
<ItemsControl ... ItemTemplate="{StaticResource ColumnsTemplate}">
<HeaderedContentControl Header="Value One:">
<TextBox x:Name="TextBoxOne" />
</HeaderedContentControl>
<HeaderedContentControl Header="Value Two:">
<TextBox x:Name="TextBoxTwo" />
</HeaderedContentControl>
...
</ItemsControl>
Это позволяет легко добавлять / удалять элементы из ItemsControl или, что еще лучше, привязывать данные.
Если вы предпочитаете автоматическое изменение размера сетки, а не размер звезды (3 * и 7 *), вы можете использовать общую область определения размера, установив IsSharedSizeScope
для ItemsControl
и SharedSizeGroup
для первого ColumnDefinition
.
Другим вариантом является GridView
, но мне труднее использовать для этой цели.