Подтвердить что ты не робот

Grid SharedSizeGroup и * размер

У меня есть пользовательский элемент управления, называемый 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 (каждая в отдельную строку). Моя цель состоит в том, чтобы каждая ширина столбцов различных UserControls оставалась в синхронизации. Все работает отлично при использовании SharedSizeGroup, за исключением одной вещи. Кажется, что любой столбец с шириной * не ведет себя так, как должен. Похоже, что ширины столбцов * заданы так, как если бы они были автоматически.

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

Спасибо.

4b9b3361

Ответ 1

MSDN:

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

Если вы используете звезду, тогда все столбцы будут иметь одинаковую ширину, поэтому вы должны назначить один и тот же 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)


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

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

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