WPF Растягивание панели внутри button на всё доступное место

Рейтинг: 0Ответов: 1Опубликовано: 08.07.2023

У меня есть Button

<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <Button Style="{DynamicResource Round}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                    <ColumnDefinition Width="auto"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <TextBlock>Сохранить</TextBlock>
                <Grid Grid.Column="1" Margin="70,0,0,0">
                    <Ellipse Fill="Black" Width="5" Height="5"></Ellipse>
                    <Ellipse Fill="Black" Width="5" Height="5" Margin="5,2,-5,9"/>
                    <Ellipse Fill="Black" Width="5" Height="5" Margin="10,2,-10,10"/>
                    <Ellipse Fill="Black" Width="5" Height="5" Margin="15,6,-15,6"/>
                </Grid>
            </Grid>
        </Button>
    </Grid>

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

Ответы

▲ 0

Решение которое мне помогло. В дизайнере VS щелкните правой кнопкой по button и выберите правка шаблона, затем правка копии, введите желаемое наименование для шаблона и нажмите OK.

Стандартный шаблон будет добавлен в проект, теперь можно его отредактировать. Найдите в нем примерно такое место:

<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" Background="{TemplateBinding Background}"

И замените у

VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"

замените их значения на Stretch теперь в button если добавить grid или stackpanel, то она может будет занимать все доступное место. Пример результата:

<Grid>
        <Button Style="{DynamicResource Round}">
            <Grid>
                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">Text</TextBlock>
            </Grid>
        </Button>
    </Grid>    

введите сюда описание изображения