В чем разница между «*» и «Авто» в определениях сетки Silverlight - PullRequest
19 голосов
/ 21 мая 2010

пытается понять следующее:

<Grid Name="Root">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
</Grid>

Может ли кто-нибудь помочь мне объяснить разницу между * и Auto в приведенном выше фрагменте?

спасибо

Ответы [ 3 ]

25 голосов
/ 22 мая 2010

Auto означает, что этот столбец / строка задают размер содержащихся элементов.

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

На самом деле * эквивалентно 1*.Можно указать 2*, 3* ... N* для ширины или высоты.Алгоритм, используемый Silverlight, заключается в суммировании всех значений N для всех строк с использованием *, а затем присваивает каждой строке соответствующую долю доступного пространства.Например: -

<Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition Height="2*" />
    <RowDefinition Height="3*" />
    <RowDefinition Height="Auto" />
</Grid.Definitions>

Сначала будет определено, насколько высокой должна быть четвертая строка от ее содержимого, и вычтет ее из полной доступной высоты.Оставшаяся часть высоты будет разделена на ряды *.Первый получает 1/6, второй получает 1/3, а третий получает 1/2 доступной высоты.

4 голосов
/ 21 мая 2010

Auto сделает размер каждого столбца таким, чтобы он мог вместить все, что содержится в нем.

* будет использовать максимальное количество доступного пространства. Лучше всего использовать, когда у вас есть «оставшийся» столбец, который вы хотите просто изменить размер до того, что осталось.

Пример Сетка ширины не определена.

Сценарий 1:

Column 1  | Column 2  | Column 3
----------------------------------
100 Width | Auto      | 200 Width

В этом случае столбец 2 может быть любым между 1 и тем содержимым, которое ему требуется, и максимальным пространством, доступным для ширины сетки. Если бы столбец 2 был изменен на * и ширину, определенную на сетке в целом, он бы заполнил оставшееся пространство для достижения ширины сетки. Если у вас есть два столбца, заданных как *, и определена ширина сетки, то они будут конкурировать за оставленный пробел и разделять его.

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

Сценарий 2 (столбец 3 содержит содержимое шириной 100, а общая ширина сетки 800):

Column 1  | Column 2  | Column 3  | Column 4
--------------------------------------------
100 Width | 200 Width | Auto      | *

В этом случае столбец 3 будет иметь ширину только 100. Колонка 4 будет иметь ширину 400, чтобы заполнить оставленное пространство.

1 голос
/ 21 мая 2010

Эта страница (по общему признанию из Silverlight 2, но она все еще действует) содержит несколько примеров использования сетки со следующими пояснениями:

Для каждой строки в сеткеесть элемент RowDefinition.Все определения строк заключены в элемент Grid.RowDefinitions.Наши первые две строки имеют высоту 50 пикселей, а высота третьей - «*».Это означает, что строка займет все место в таблице, которое не занято другими строками.

и:

Другой вариант - установить ширину и/ или высота до «авто».Таким образом, каждый столбец / строка меняет свой размер, чтобы соответствовать ширине / высоте элементов управления в нем.Например:

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