WPF Grid vs Stackpanel - PullRequest
       61

WPF Grid vs Stackpanel

11 голосов
/ 17 января 2009

Для макета WPF / Silverlight лучше использовать сетку с множеством строк и столбцов или тоннами стековых панелей?

Ответы [ 7 ]

18 голосов
/ 17 января 2009

Вы должны использовать Grid, если вам нужно, чтобы вещи располагались горизонтально и вертикально. Используйте StackPanel для создания строки или столбца, когда эти вещи не должны совпадать с чем-либо другим.

Однако не ограничивайте себя этими двумя вариантами. В частности, посмотрите на DockPanel. Это немного сложнее, чем StackPanel, но его разметка не так загромождена, как Grid. Вот хорошая статья о DockPanel:

Использование DockPanel в Silverlight 2

3 голосов
/ 17 января 2009

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

1 голос
/ 18 января 2013

Я не думаю, что Grid - лучшая идея.

например, если вы хотите вставить строку в существующий документ макета сетки (в середине)

есть существующая строка 1,2,3,4, затем необходимо вставить новую строку между 1 и 2.

тогда вам пришлось изменить 2,3,4 на 3,4,5 (найти все теги для изменения ....)

Подумайте, есть ли в одной строке 3-5 столбцов ... Переупорядочивать все цифровые данные - грязная работа. !!!

1 голос
/ 17 января 2009

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

0 голосов
/ 23 февраля 2019

Оба имеют силу (Сетка / Стеклопанель). Проблема с Grid заключается в реструктуризации линий. Проблема со Stackpanel заключается в том, что нет структуры таблицы (фиксированная ширина столбцов). Поэтому я думаю, что это хорошее решение этой проблемы :-)

Определение стилей

<Page.Resources>
    <Style x:Key="LabelCol1" TargetType="Label">
        <Setter Property="Width" Value="200" />
    </Style>
    <Style x:Key="EditCol2" TargetType="TextBox">
        <Setter Property="Width" Value="250" />
        <Setter Property="TextWrapping" Value="Wrap" />
        <Setter Property="Margin" Value="3" />
    </Style>
    <Style x:Key="ButtonCol3" TargetType="Button">
        <Setter Property="Width" Value="120" />
        <Setter Property="Margin" Value="3" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="HorizontalContentAlignment" Value="Center" />
    </Style>
</Page.Resources>

И использование стилей в Stackpanel

<StackPanel>
    <StackPanel Orientation="Horizontal">
        <Label Style="{StaticResource LabelCol1}" Content="Solution path"  />
        <TextBox Style="{StaticResource EditCol2}" />
        <Button Style="{StaticResource ButtonCol3}" Content="Open..." />
    </StackPanel>
    <StackPanel Orientation="Horizontal">
        <Label Style="{StaticResource LabelCol1}" Content="Solution name"  />
        <TextBox Style="{StaticResource EditCol2}" />
    </StackPanel>
</StackPanel>
0 голосов
/ 15 августа 2013

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

Например, на странице XAML я использую панель горизонтального стека, как родительскую сетку, затем, если мне нужен столбец, у меня есть отдельная «вертикальная» вложенная панель стека. Таким образом, горизонтальная панель стека становится «сеткой», а вложенная вертикальная панель стека становится столбцами. Мне легче читать и изменять строки и столбцы в сетке.

0 голосов
/ 17 января 2009

У меня нет опыта работы с таким макетом, но я готов поспорить, что сетка легче рендерить, чем множество вложенных панелей стека.

...