0

Подскажите как сделать чтобы при изменение окна, менялся размер кнопок

<Grid>
    <Grid ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <DockPanel Grid.Column="0" Grid.Row="0" Width="Auto" Height="40" >
            <TextBlock Text="Example" FontSize="30" Margin="5,0,0,0"></TextBlock>
        </DockPanel>
        <DockPanel Grid.Column="1" Grid.Row="0" HorizontalAlignment="Right" Grid.ColumnSpan="1" Width="Auto" >
            <Button Style="{DynamicResource BtnStyle}" Foreground="White" x:Name="BtnStatistic" Content="Статистика" Margin="-355,5,0,0" Width="112"></Button>
            <Button Style="{DynamicResource BtnStyle}" Foreground="White" x:Name="BtnSetting" Grid.ColumnSpan="1" Content="Настройки" Margin="-122,5,0,0" Width="112"></Button>
        </DockPanel>
    </Grid>
</Grid>
xellan
  • 560
  • 3
  • 11

1 Answers1

2

Можно разбить Grid на 3 колонки с равной шириной и сделать кнопки четко привязанными к одной из 3-х колонок Grid'a.
Обратите внимание на Grid.Column у кнопок, у TextBlock'a свойство можно не указывать, т.к. по дефолту там будет Grid.Column="0" (первая колонка).

<Grid ShowGridLines="True">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
&lt;TextBlock Text=&quot;Example&quot; 
           FontSize=&quot;30&quot; 
           Margin=&quot;5,0,0,0&quot;/&gt;

&lt;Button Style=&quot;{DynamicResource BtnStyle}&quot; 
        Foreground=&quot;White&quot; 
        x:Name=&quot;BtnStatistic&quot; 
        Content=&quot;Статистика&quot;
        Grid.Column=&quot;1&quot;/&gt;

&lt;Button Style=&quot;{DynamicResource BtnStyle}&quot; 
        Foreground=&quot;White&quot;
        x:Name=&quot;BtnSetting&quot; 
        Grid.Column=&quot;2&quot;
        Content=&quot;Настройки&quot;/&gt;

</Grid>

OwDafuq
  • 577
  • хитро, удобный способ и не требует хранения элементов в контейнерах отдельных Подправил тут чтобы пропорционально растягивалось <Grid.ColumnDefinitions> </Grid.ColumnDefinitions>

    И через margin сделал отступы

    – xellan Mar 07 '23 at 11:45
  • Если хотите, чтобы кнопки, например, занимали меньше места, то да, ширину можно указать как 0.2* – OwDafuq Mar 07 '23 at 11:56
  • а подскажите как можно ограничить растягивание кнопки по высоте, в ширину растягивается как надо, а по высоте слишком много. – xellan Mar 07 '23 at 12:00
  • 2 варианта - 1) ограничить высоту строки грида; 2) MaxHeight – OwDafuq Mar 07 '23 at 12:02
  • спасибо еще раз) Со вторым вариантом растягивается как надо) А с первым не нашел пример в гугл или инфу. – xellan Mar 07 '23 at 12:11
  • 1
    Строка грида задается как , ничто не мешает вам в Height вставить что угодно (число, 0.2, , 2*, etc...) – OwDafuq Mar 07 '23 at 12:14
  • <Grid.RowDefinitions> </Grid.RowDefinitions> Работает для всех элементов) – xellan Mar 07 '23 at 12:27
  • 1
    Верно, поэтому если вы хотите, например, чтобы изменялась высота только у TextBlock'a, но не у кнопок - 2 варианта: Вариант №1 - разбить строку (gridRow) на строки (Grid внутри Grid'a, у которого будет установлено свойство Grid.Row="1" (например)) и в нем сделать несколько строк (например 3), где 3 из них будет занимать TextBlock (Grid.RowSpan="3"), а кнопки по 1 (Grid.Row="1"); Вариант №2 - сделать всё тоже самое, что в варианте №1, но не делать грид в гриде, а в главном гриде добавить строки :) – OwDafuq Mar 07 '23 at 12:30