2017-02-21 9 views
0

Я только начал использовать WPF (вместо WinForms), и я пытаюсь создать фиксированного размера окна (см рисунок).Matching сетки и размер окна WPF

image 1

Проблема, когда я запустить приложение в правом нижнем углу испортится, имея вблизи нулевого пространства между пуговицей и краем. (См другого изображения)

image 2

Вот код XAML (в основном генерируется дизайнером Visual Studio)

<Window x:Class="UseCaseHelper.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:UseCaseHelper" 
     mc:Ignorable="d" 
     Title="UseCaseHelper" Height="500" Width="900"> 
    <Grid> 
     <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75"/> 
     <Button x:Name="button1" Content="Button" HorizontalAlignment="Left" Margin="809,441,0,0" VerticalAlignment="Top" Width="75"/> 

    </Grid> 
</Window> 

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

+0

Использование Margin = "10" для обоих, установите VerticalAlignment = верх/низ и HorizontalAlignment = влево/вправо. – AnjumSKhan

ответ

1

Я всегда нахожу DockPanel более гибким в этих условиях. Вместо VerticalAlighnment и Margin вы установили, вы можете установить DockPanel.Dock в Left, Right, Bottom или Top.

<DockPanel LastChildFill="False"> 
     <Button DockPanel.Dock="Top" 
       Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" 
       Width="75"/> 
    <Button DockPanel.Dock="Bottom" 
      Content="Button" HorizontalAlignment="Right" Margin="0,0,10,10" Width="75"/> 
</DockPanel> 

Обратите внимание, что вы также можете использовать Margin = "10" для обеих кнопок.

Однако, если вы хотите использовать сетку, вы можете использовать следующую структуру:

<Grid> 
    <Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0" 
      Width="75"/> 
    <Button Content="Button" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,10,10" Width="75"/> 
</Grid> 

Обратите внимание, что в этом случае они будут перекрываться, если окно достаточно мало.

Другой вариант заключается в добавлении RowDefinitions и ColumnDefinitions к сетке:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <Button 
      Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0" 
      Width="75"/> 
    <Button Grid.Column="2" Grid.Row="2" 
     Content="Button" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,10,10" Width="75"/> 
</Grid> 

Его Perfomance лучше, чем два других, если окно очень мало.

+0

Спасибо! Работает DockPanel и заданный запас. – Viva