SharedSizeGroup Grid и * определение размера - PullRequest
38 голосов
/ 12 января 2011

У меня есть пользовательский элемент управления, назовите его UserControl, который имеет сетку со следующими определениями столбцов:

<Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="B"/>
            <ColumnDefinition Width="*" SharedSizeGroup="C"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="D"/>
            <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="E"/>
            <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="F"/>
            <ColumnDefinition Width="110" SharedSizeGroup="G"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/>
</Grid.ColumnDefinitions>

У меня также есть MainWindow, которое содержит саму сетку со следующим свойством, определенным для сетки:

Grid.IsSharedSizeScope="True"

Теперь я добавил пару UserControls в сетку в MainWindow (каждый в отдельную строку). Моя цель - обеспечить синхронизацию каждой из ширины столбцов различных пользовательских элементов управления. Все отлично работает при использовании SharedSizeGroup, кроме одной вещи. Кажется, что любой столбец с шириной * не ведет себя должным образом. Похоже, * ширина столбцов установлена ​​так, как если бы они были автоматически.

Есть ли какие-либо ограничения / проблемы с SharedSizeGroup и * определением размера? Кажется, это лучший способ синхронизировать ширину столбцов, но я не могу это исправить.

Спасибо.

1 Ответ

52 голосов
/ 12 января 2011

MSDN :

Столбцы и строки, участвующие в совместном использовании размера, не учитывают размер звезды.В сценарии с разделением по размерам размер звездочки рассматривается как Авто

Если вы используете звездочку, тогда все столбцы будут иметь одинаковую ширину, поэтому вам следует назначить одинаковые SharedSizeGroup всем, если вы этого не сделаетеобратите внимание на аспект автоматического определения размера:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
    <ColumnDefinition Width="Auto" SharedSizeGroup="B"/>
    <ColumnDefinition Width="*" SharedSizeGroup="StarDontWork"/>
    <ColumnDefinition Width="Auto" SharedSizeGroup="D"/>
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/>
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/>
    <ColumnDefinition Width="110" SharedSizeGroup="G"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/>
</Grid.ColumnDefinitions>

(Из этого поведения также следует, что вы можете удалить свойство Width, когда установлено SharedSizeGroup)


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

Простой пример:

<Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="A"/>
    <ColumnDefinition SharedSizeGroup="B" Width="*"/>
    <ColumnDefinition SharedSizeGroup="C"/>
</Grid.ColumnDefinitions>

Как объяснено, Width="*" ничего не сделает, но поскольку синхронизируются столбцы 0 и 2, столбец 1 должен быть синхронизировантак что вы можете просто сбросить SharedSizeGroup:

<Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="A"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition SharedSizeGroup="C"/>
</Grid.ColumnDefinitions>
...