Что такое различие между “*” и “Автоматический” в Определениях Расположения Сетки Silverlight

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

<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>

Кто-либо может помочь мне в объяснении различия между * и Автоматический в вышеупомянутом отрывке?

спасибо

19
задан AnthonyWJones 22 May 2010 в 08:10
поделиться

3 ответа

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

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

Фактически * эквивалентно 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 доступной высоты.

25
ответ дан 30 November 2019 в 04:07
поделиться

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, чтобы заполнить оставшееся пространство.

4
ответ дан 30 November 2019 в 04:07
поделиться

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

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

и:

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

1
ответ дан 30 November 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: