WPF窗口最大化导致项目放错位置

时间:2015-07-26 06:27:51

标签: c# wpf wpf-controls expression-blend

我已将WPF窗口设置为最大化,但其中的项目(例如按钮和图像)有时会随窗口一起拉伸,甚至位置也会放错位置。

<Window x:Class="HelloApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="HelloApp" Height="661.842" Width="1105.263"
    WindowStyle="None" ResizeMode="NoResize"  
    WindowStartupLocation="CenterScreen" WindowState="Maximized">
    <Grid Background="#FFF3F3F3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="Auto" Width="Auto">
        <Label Content="Hello" HorizontalAlignment="Left" Margin="20,48,0,0" VerticalAlignment="Top" FontSize="36" FontFamily="Segoe UI Light"/>
        <Image Margin="49,7,994,593" Source="Infinite_symbol__128.png"/>
        <Button x:Name="exitBtn" Content="" HorizontalAlignment="Left" Margin="1042.148,9.606,0,0" VerticalAlignment="Top" Width="52.852" Height="51" BorderBrush="{x:Null}" Click="exitBtn_Click">
            <Button.Background>
                <ImageBrush ImageSource="close33 (2).png"/>
            </Button.Background>
        </Button>
    </Grid>
</Window>

例如,如果我启动程序时按钮X位于我的编辑器的左上角,它将保留在编辑器的左上角,但是当最大化时实际的左上角会更远。

我希望你理解我的意思。我希望我的孩子项目与父母一起最大化。如何编辑我的代码才能完成这项工作?

2 个答案:

答案 0 :(得分:4)

您可以根据所需的布局定义特定的MarginsGrid.RowDefinitions,而不是Grid.ColumnDefinitions。例如以下Xaml

<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 Grid.Row="0" Grid.Column="0" Content="TopLeft"/>
    <Button Grid.Row="0" Grid.Column="2" Content="TopRight"/>
    <Canvas Grid.Row="1" Grid.Column="1"/>
    <Button  Grid.Row="2" Grid.Column="0" Content="BottomLeft" />
    <Button  Grid.Row="2" Grid.Column="2" Content="BottomRight" />
</Grid>

以这种方式划分你的窗口:

enter image description here

在上面的Xaml中,Auto表示&#34;大小与单元格内容&#34;并且*表示&#34;大小到剩余区域&#34;。

答案 1 :(得分:2)

当您使用Grid作为窗口的主要容器时,请不要修改其属性,如width或...它保持网格适合窗口。然后点击每个元素,尝试在chain的{​​{1}}边框上播放Grid等锚点。

例如,我在Xaml Designer模式下设置了right chain符号和top chain符号,并在close其他open符合右上角的按钮它的。

enter image description here

chains

其他方式是使用 <Grid Background="#FFF3F3F3"> <Label Content="Hello" HorizontalAlignment="Left" Margin="20,48,0,0" VerticalAlignment="Top" FontSize="36" FontFamily="Segoe UI Light"/> <Image Source="Infinite_symbol__128.png" Margin="113,0,0,0"/> <Button x:Name="exitBtn" Content="Test" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,0,0" Width="65" Height="51" BorderBrush="{x:Null}" Click="exitBtn_Click"> <Button.Background> <ImageBrush ImageSource="close33 (2).png"/> </Button.Background> </Button> </Grid> columns来获得更好的布局,但即使使用cols和row,也必须在单元格中设置元素的rows。这是将元素保持在理想位置的安全方法。