Ответ 1
Use UniformGrid
<UniformGrid HorizontalAlignment="Right" Rows="1" Columns="2">
<Button Content="Ok" Grid.Column="0"/>
<Button Content="Cancel" Grid.Column="1"/>
</UniformGrid>
Предположим, у меня есть две кнопки WPF в окне с содержимым следующим образом:
<Button>OK</Button>
<Button>Cancel</Button>
Я хочу, чтобы эти кнопки были одинаковой ширины, однако в сценарии, где Content
привязан к локализованному значению для данного пользовательского языка, я не знаю, насколько широкими должны быть кнопки для размещения нового содержание.
Как я могу применить минимальную ширину к этим кнопкам, так что ширина самого широкого (в соответствии с содержимым) эффективно используется как MinWidth
для обоих, тем самым сохраняя их равномерными?
Или иначе: я не хочу, чтобы кнопки были шириной их контейнера (если только использование контейнера в умном виде не является ответом на мою проблему), и я не хочу, чтобы каждый из них просто размер для собственного контента, потому что это сделает их разными. Я хочу что-то промежуточное. Тот, у которого наибольший контент для размера, чтобы отображать его содержимое, и все остальные, чтобы размер был таким же, чтобы ширина была одинаковой.
Я ожидаю, что ответ будет заключаться в том, чтобы положить их в какой-то контейнер. Я знаю, что могу использовать Grid
и позволить им заполнять ячейки сетки ", но я не хочу, чтобы они были слишком широкими. Я знаю, что у меня может быть код, который работает на событии Content_Changed
для кнопок и устанавливает минимальную ширину в ширину самой широкой кнопки, но меня интересует метод pure-xaml. Возможно, мне нужно создать настраиваемый элемент управления, расширяющий ItemsControl
, который будет зависеть от кода rusn, когда новые элементы будут добавлены или изменены, и применяет ширину самого широкого элемента как MinWidth
всех остальных элементов.
Большое спасибо заранее.
Use UniformGrid
<UniformGrid HorizontalAlignment="Right" Rows="1" Columns="2">
<Button Content="Ok" Grid.Column="0"/>
<Button Content="Cancel" Grid.Column="1"/>
</UniformGrid>
Сетка
<Grid HorizontalAlignment="Right" Grid.IsSharedSizeScope="true">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A"/>
<ColumnDefinition SharedSizeGroup="A"/>
</Grid.ColumnDefinitions>
<Grid.Children>
<Button Grid.Column="0" Content="OK"/>
<Button Grid.Column="1" Content="Cancel"/>
</Grid.Children>
</Grid>
Это может быть разбито, вам просто нужно установить IsSharedSizeScope
для общего предка, например:
<StackPanel Grid.IsSharedSizeScope="true">
<Grid HorizontalAlignment="Right">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A"/>
</Grid.ColumnDefinitions>
<Grid.Children>
<Button Grid.Column="0" Content="OK"/>
</Grid.Children>
</Grid>
<!-- ... -->
<Grid HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A"/>
</Grid.ColumnDefinitions>
<Grid.Children>
<Button Grid.Column="0" Content="Cancel"/>
</Grid.Children>
</Grid>
</StackPanel>
Чтобы кнопки слишком сильно изменили значение HorizontalAlignment
сетки на что-то еще, чем Stretch
, или установите MaxWidth
.