Я почесал голову над этим уже несколько дней. Я пытаюсь создать UserControl
(s), которые позволят мне упростить процесс создания форм ввода / вывода. Во многих формах мне нужно что-то со структурой, такой как это:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto">
<ColumnDefinition Width="*">
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition>
<RowDefinition>
<RowDefinition>
...
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="..."/>
<TextBox Grid.Column="1" Grid.Row="0" Text="..."/>
<TextBlock Grid.Column="0" Grid.Row="1" Text="..."/>
<TextBox Grid.Column="1" Grid.Row="1" Text="..."/>
<TextBlock Grid.Column="0" Grid.Row="2" Text="..."/>
<TextBox Grid.Column="1" Grid.Row="2" Text="..."/>
...
<Grid>
Я хотел бы написать что-то вроде этого:
<mycontrols:ContainerControl>
<mycontrols:RowControl Label="Some label" Text="{Binding SomeProperty}">
<mycontrols:RowControl Label="Some label" Text="{Binding SomeProperty}">
<mycontrols:RowControl Label="Some label" Text="{Binding SomeProperty}">
<mycontrols:RowControl Label="Some label" Text="{Binding SomeProperty}">
</mycontrols:ContainerControl>
XAML RowControl
будет просто стиль TextBlock
и TextBox
на мой вкус:
<TextBlock Text="{Binding Label}"/>
<TextBlock Text="{Binding Text}"/>
Как я понимаю, есть несколько проблем с этим:
1.- Для того, чтобы элемент зависит от макета сетки, он должен быть непосредственным потомком этой сетки.
2.- Количество строк произвольно. В Grid
вам нужно указать каждое определение строки.
Если бы я мог каким-то образом настроить расположение Grid
не только на непосредственных, но и на вложенных, я думаю, я мог бы сделать это. Я также готов решить это с другим подходом, если вы можете придумать один.
Ожидаемое поведение finally представляет собой смесь StackPanel
и Grid
, а именно:
~ Можно добавить произвольное количество элементов без определения строк (просто сложите их в стек) ,
~ Контейнер разделен на два столбца: первый принимает размер самого большого элемента (auto), а второй - оставшуюся доступную ширину (*).
All помощь приветствуется! Заранее спасибо:)