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

Кнопки с равномерным размером в соответствии с содержимым самой большой кнопки

Предположим, у меня есть две кнопки WPF в окне с содержимым следующим образом:

<Button>OK</Button>
<Button>Cancel</Button>

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

Как я могу применить минимальную ширину к этим кнопкам, так что ширина самого широкого (в соответствии с содержимым) эффективно используется как MinWidth для обоих, тем самым сохраняя их равномерными?

Или иначе: я не хочу, чтобы кнопки были шириной их контейнера (если только использование контейнера в умном виде не является ответом на мою проблему), и я не хочу, чтобы каждый из них просто размер для собственного контента, потому что это сделает их разными. Я хочу что-то промежуточное. Тот, у которого наибольший контент для размера, чтобы отображать его содержимое, и все остальные, чтобы размер был таким же, чтобы ширина была одинаковой.

Я ожидаю, что ответ будет заключаться в том, чтобы положить их в какой-то контейнер. Я знаю, что могу использовать Grid и позволить им заполнять ячейки сетки ", но я не хочу, чтобы они были слишком широкими. Я знаю, что у меня может быть код, который работает на событии Content_Changed для кнопок и устанавливает минимальную ширину в ширину самой широкой кнопки, но меня интересует метод pure-xaml. Возможно, мне нужно создать настраиваемый элемент управления, расширяющий ItemsControl, который будет зависеть от кода rusn, когда новые элементы будут добавлены или изменены, и применяет ширину самого широкого элемента как MinWidth всех остальных элементов.

Большое спасибо заранее.

4b9b3361

Ответ 1

Use UniformGrid

<UniformGrid HorizontalAlignment="Right" Rows="1" Columns="2">
  <Button Content="Ok" Grid.Column="0"/>
  <Button Content="Cancel" Grid.Column="1"/>
</UniformGrid>

Ответ 2

Сетка

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