Что лучше в WPF для компоновки пользовательского интерфейса, используя одну сетку или вложенные сетки
Я создаю пользовательский интерфейс в WPF, у меня есть куча функциональных областей, и я использую Grid для его организации.
Теперь сетка, которую я хочу, неравномерна, так как в некоторой функциональной области будет отображаться несколько ячеек в Grid. Мне было интересно, что лучше всего в решении этого. Должен ли я создать одну сетку, а затем для каждой функциональной области, чтобы она охватывала несколько ячеек, или я должен разбить ее на несколько вложенных сеток.
На этом изображении самая левая панель (панели, разделенные серой полосой) - это то, что я хочу. Средняя панель показывает одну сетку, где синие линии перекрываются функциональной областью. Самая правая панель показывает, как я могу это сделать с вложенными сетками. Вы можете видеть, что зеленая сетка имеет один горизонтальный раскол. В нижней ячейке находится желтая сетка с вертикальным расщеплением. В боковой части левая ячейка представляет собой красную сетку с снова горизонтальным расколом.
Сетки http://www.freeimagehosting.net/uploads/08f2711bae.jpg
Мне просто интересно, что такое лучшая практика, средняя или правая панель.
ОБНОВЛЕНИЕ: только для пояснения, более пример с "ориентированным на код":
Средняя панель
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Menu Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" />
<uc:Info Grid.Row="1" Grid.Column="0" />
<uc:Control Grid.Row="2" Grid.Column="0" />
<uc:Simulation Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" />
</Grid>
Правая панель:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Menu Grid.Row="0"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<uc:Info Grid.Row="0" />
<uc:Control Grid.Row="1" />
</Grid>
<uc:Simulation Grid.Column="1" />
</Grid>
</Grid>
Обновление: я должен признать, что теперь, когда я написал код для обоих подходов, решение "span" выглядит намного лучше.
Ответы
Ответ 1
Я бы лично пошел с вашей средней компоновкой, используя одну сетку с столбцами и строками строк, чтобы структурировать общий макет пользовательского интерфейса, а затем поместить панель в каждый из этих разделов, чтобы содержать фактические элементы управления (и возможный дальнейший подробный макет).
Ответ 2
Я бы рекомендовал создать одну основную сетку, разделенную на функциональные области, а затем создать в этих областях отдельные сетки/стековые панели /etc.
Вы можете не знать требования к каждой функциональной области, чтобы вы могли свободно размещать свои элементы и переключаться между макетами. Когда вы помещаете все в одну сетку с столбцами диапазона и/или строками - вы получите "трудно управляемый" макет.
Ответ 3
Я боюсь, что не могу отличить ваши решения от цвета в разных сетках и подрешетках.
Что я могу посоветовать, так это создать UserControl для каждой функциональной области, а затем создать сетку для организации этих областей.
Каждый UserControl может свободно создавать свой собственный макет (с другой сеткой или более простой StackPanel или что-то еще) и отвечает за отображение подмножества данных/обработки пользовательских событий в своей области.
Внешняя сетка - это арбитр для вещей, которые включают более одной области (например, переадресация событий между областями).
Ответ 4
Откровенно говоря, я бы пошел за докпанселем или вроде бы для композиции верхнего уровня, а сетки для низкого уровня