Воссоздание макета WinForms в WPF - PullRequest
2 голосов
/ 21 февраля 2012

Я только что унаследовал старое приложение WinForms с макетом пользовательского интерфейса, например так:

form layout

Мне поручено обновить несколько вещей о программном обеспечении, одним из которых является перенос его на WPF, с которым я ранее не работал. Мне также сказали, что новый пользовательский интерфейс WPF должен выглядеть идентично существующему макету пользовательского интерфейса, поэтому я пытаюсь выяснить, как создать этот макет в WPF. Мне нужна панель инструментов в верхней части окна, которая растягивается на всю ширину окна фиксированного размера. Могу ли я сделать это в сетке по умолчанию или мне нужна док-панель для этого? Кроме того, я предполагаю, что я бы использовал сетку с 2 столбцами и 3 строками для размещения шести групповых блоков?

Ответы [ 3 ]

2 голосов
/ 21 февраля 2012

Все, что вы можете сделать с DockPanel, также можно сделать с Grid - DockPanel - это просто ярлык.Так что да, вы можете сделать все это по умолчанию Grid.

Что касается того, как сделать макет: это зависит от того, как вы хотите, чтобы размер изменялся.Все ли остается пропорциональным при изменении размера?Если это так, то подойдет Grid с тремя столбцами (и процентным размером для ColumnDefinition с).На самом деле вам потребуется четыре строки, но не три - первый RowDefinition будет для ToolBar (с использованием ColumnSpan="3") и потребуется Height="Auto", поэтому он использует ToolBarразмер по умолчанию;остальные строки будут иметь размер в процентах.

Попробуйте, посмотрите, работает ли он для вас.Если изменение размера должно быть более сложным, чем просто пропорциональным, тогда опубликуйте второй снимок экрана с другим размером, и мы можем попытаться помочь вам в этом.

1 голос
/ 21 февраля 2012

Лично я бы использовал DockPanel для областей меню / содержимого, затем использовал бы сетку в области содержимого для определения групповых полей

<DockPanel>
    <Grid x:Name="MenuRegion" DockPanel.Dock="Top" />
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
    </Grid>

    <Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" />
    <Grid Grid.Row="0" Grid.Column="2" />

    <Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" />
    <Grid Grid.Row="1" Grid.Column="2" />

    <Grid Grid.Row="2" Grid.Column="0" />
    <Grid Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" />
</DockPanel>

Конечно, вы также можете сделать часть области менюсетки и установите ее так, чтобы она охватила все строки, но мне лично нравится хранить их отдельно.

0 голосов
/ 21 февраля 2012

Сетка с 3 рядами (один для меню). Поскольку у вас неравномерный интервал в строках, просто один столбец в основной сетке. Затем сетка в сетке для расстояний между двумя столбцами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...