Подтвердить что ты не робот

Что лучше в 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" выглядит намного лучше.

4b9b3361

Ответ 1

Я бы лично пошел с вашей средней компоновкой, используя одну сетку с столбцами и строками строк, чтобы структурировать общий макет пользовательского интерфейса, а затем поместить панель в каждый из этих разделов, чтобы содержать фактические элементы управления (и возможный дальнейший подробный макет).

Ответ 2

Я бы рекомендовал создать одну основную сетку, разделенную на функциональные области, а затем создать в этих областях отдельные сетки/стековые панели /etc. Вы можете не знать требования к каждой функциональной области, чтобы вы могли свободно размещать свои элементы и переключаться между макетами. Когда вы помещаете все в одну сетку с столбцами диапазона и/или строками - вы получите "трудно управляемый" макет.

Ответ 3

Я боюсь, что не могу отличить ваши решения от цвета в разных сетках и подрешетках.

Что я могу посоветовать, так это создать UserControl для каждой функциональной области, а затем создать сетку для организации этих областей.

Каждый UserControl может свободно создавать свой собственный макет (с другой сеткой или более простой StackPanel или что-то еще) и отвечает за отображение подмножества данных/обработки пользовательских событий в своей области.

Внешняя сетка - это арбитр для вещей, которые включают более одной области (например, переадресация событий между областями).

Ответ 4

Откровенно говоря, я бы пошел за докпанселем или вроде бы для композиции верхнего уровня, а сетки для низкого уровня