2011-12-27 12 views
2

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

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

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

Спасибо.

+0

Попробуйте удалить анкеры на своих элементах управления; set Anchor to None – Shai

+2

В WPF отсутствует свойство привязки. –

ответ

5

Путь к работе в WPF - все содержимое должно быть выровнено в вашем MainGrid. Если вы поместите кнопку 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> 

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

+0

@ DarrenYoung, в дополнение к описанию здесь De Ruige (каждая «кнопка» в собственной ячейке сетки/ячейке ячейки), вы также можете установить свойства вашей кнопки для HorizontalAlignment и VerticalAlignment на «Stretch», так как ячейки растягиваются так что тоже будут кнопки внутри них. – DRapp

+0

@DRapp: Спасибо, что указали это. Забыл добавить некоторые свойства кнопок, сделал редактирование! –

1

Я бы использовал 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> 
1

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

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

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

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

Grid.RowSpan - MSDN

0

Изменение HorizontalAlignment к "правой" и VerticalAlignment на "Bottom".

Bam. Проблема решена.

+0

Это ужасный совет и очень плохая практика ... –

+0

@NickProzee вы можете объяснить, как это плохая практика? Просто интересуюсь. – inspiration

Смежные вопросы