Кнопки изменения / выравнивания WPF при изменении размера родительского окна - PullRequest
3 голосов
/ 27 декабря 2011

Я пишу свое первое приложение WPF, и у меня возникают некоторые проблемы с изменением размера / выравниванием кнопок, когда окно развернуто.

По сути, у меня есть один ряд больших кнопок в верхней частимое заявление.В настоящее время они находятся на холсте, но я также пробовал Grid и Stackpanel.Всякий раз, когда я максимизирую (или просто расширяю свое окно), кнопки, по сути, остаются на одном месте.Я хочу либо изменить положение кнопок относительно родительского контейнера, либо растянуть ширину кнопки, чтобы учесть изменение.

Кто-нибудь может дать совет о том, каков наилучший контейнер и способ для этого?Я посмотрел на Canvas.Top/Left, HorzontalAlignment, Margin и т. Д., Но не могу найти правильную комбинацию.

Спасибо.

Ответы [ 4 ]

5 голосов
/ 27 декабря 2011

Путь в WPF - все содержимое должно быть выровнено в вашей основной сетке.Если вы поместите кнопку 1, например, в Grid.Row 3 и Grid.Column 2, она останется там.

Если вы измените размер окна, размер сетки будет изменен, но элементы управления останутся на своих местах.Вы также можете сделать строки / столбцы сетки фиксированной ширины, авторазмера или в процентах.

То же самое с вашими элементами управления.Так что, зная это, нужно просто поиграть с этим.

Вот пример.Просто поиграйте с ширинкой:

<Grid x:Name="LayoutRoot" Background="White">
    <Grid.RowDefinitions>
        <RowDefinition Height="43*" />
        <RowDefinition Height="222*" />
        <RowDefinition Height="35*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="113*" />
        <ColumnDefinition Width="168*" />
        <ColumnDefinition Width="119*" />
    </Grid.ColumnDefinitions>
    <Button Content="TEST" Grid.Column="2" Grid.Row="1" 
     HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" />
</Grid>

Сделайте немного авто, исправьте немного, и в конце вы поймете цель.

1 голос
/ 27 декабря 2011

Вы можете использовать сетку как упомянутое @ De-ruige.

Кроме того, чтобы помочь вам понять значение сетки, используйте свойство "ShowGridLines" в определении сетки, например:

<Grid x:Name="LayoutRoot" Background="White" ShowGridLines="True">

Кроме того, если вы хотите добавить элемент управления, например кнопку, в несколько ячеек в вашей сетке, вы можете использовать их: Grid.RowSpan / Grid.ColumnSpan.

Grid.RowSpan - MSDN

1 голос
/ 27 декабря 2011

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

<DockPanel>
  <StackPanel DockPanel.Dock="Top">
    <Button Content="Button1"/>
    <Button Content="Button2"/>
    <Button Content="Button3"/>
  </StackPanel
  <Grid>
    <!-- Stuff in the main part of the window here -->
  </Grid>
</DockPanel>
0 голосов
/ 09 сентября 2014

Измените HorizontalAlignment на "Право" и VerticalAlignment на "Низ".

Bam. Решение проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...