匹配网格和窗口大小WPF

时间:2017-02-21 18:06:36

标签: wpf xaml

我刚开始使用WPF(而不是winforms),我正在尝试创建一个固定大小的窗口(见图片)。

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>

我尝试使用Google搜索解决方案但没有取得多大成功。希望有人可以指出我在这里做错了什么。

1 个答案:

答案 0 :(得分:1)

我总是在这些设置中发现DockPanel更灵活。您可以将DockPanel.Dock设置为LeftRightBottomTop,而不是您设置的VerticalAlighnment和边距。

<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 =&#34; 10&#34;两个按钮。

但是,如果要使用Grid,可以使用以下结构:

<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>

请注意,在这种情况下,如果Window足够小,它们将重叠。

另一种选择是将RowDefinitionsColumnDefinitions添加到网格:

<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>

如果Window非常小,它的性能优于其他两个。