Вопрос или проблема
У меня есть список из 34 определений столбцов, он выглядит следующим образом:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
Есть ли более простой способ сделать это? Количество фиксировано.
Ответ или решение
В XAML действительно есть более простой способ описания списка одинаковых объектов, таких как определение столбцов для сетки (Grid). Вместо того чтобы перечислять каждое определение столбца по отдельности, вы можете использовать цикл данных (DataTemplate) или специальный метод, чтобы сократить код.
Для вашего случая с 34 колоннами, которые имеют одинаковую ширину, можно воспользоваться классом ColumnDefinition
в сочетании с его свойствами. Однако для фиксированного количества колонок проще всего будет использовать ItemsControl
или UniformGrid
.
Вот пример использования UniformGrid
, который автоматически распределит заданное количество колонок с одинаковой шириной:
<UniformGrid Columns="34">
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<!-- и так далее для всех 34 колонок, или просто оставьте это для автоматической генерации -->
</UniformGrid>
Если вы хотите строго использовать Grid
, то, к сожалению, в XAML нет прямого способа для генерации большинства одинаковых объектов без повторения кода. Но вы можете создать Style
для ColumnDefinition
, если это применимо:
<Style TargetType="ColumnDefinition">
<Setter Property="Width" Value="1*" />
</Style>
Затем в Grid.ColumnDefinitions
вы все равно будете перечислять, но код будет выглядеть более аккуратно. Таким образом, вы можете применить стиль к всем вашим ColumnDefinition
:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Style="{StaticResource YourColumnStyle}" />
<ColumnDefinition Style="{StaticResource YourColumnStyle}" />
<!-- Повторите для 34 раз -->
</Grid.ColumnDefinitions>
</Grid>
В заключение, если количество столбцов фиксировано и одинаково, то лучше всего использовать UniformGrid
, так как он избавляет от необходимости дублировать строки кода и обеспечивает простоту и читаемость вашего XAML-кода.