Auto Sizing c# WPF windows 任何更小的东西都会离开屏幕

Auto Sizing c# WPF windows anything smaller it goes off the screen

我正在尝试将 WPF window 设置为根据分辨率调整大小,但是,我似乎无法正确设置。有没有人有任何建议或我应该阅读的文章来实现这一目标?

我已经包含了一些示例代码,我已经尝试将其作为工作的基础。

此代码在 1920 x 1080 分辨率下工作正常,但任何更小的分辨率都会从屏幕上消失

任何帮助将不胜感激,提前致谢!

<WindowState="Maximized" WindowStyle="SingleBorderWindow">
    <Grid Margin="0,0,2,-21" RenderTransformOrigin="0.0,0.0">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Image HorizontalAlignment="Right" Height="100" Margin="0,30,-400,0" VerticalAlignment="Top" Width="145" Source="G:\Pi Project\Project Pi Logo.png" Grid.Column="1"/>
        <Label Content="The Pi Project" HorizontalAlignment="Right" Height="60" Margin="0,132,-390,0" VerticalAlignment="Top" Width="170" FontSize="16" Grid.Column="1" />
        <Button x:Name="saveProject_btn" Content=" Save&#xD;&#xA;Project" HorizontalAlignment="Right" Height="200" Margin="0,815,-415,0" VerticalAlignment="Top" Width="300" FontFamily="OCR A Extended" FontSize="36" Grid.Column="1"/>
        <Button x:Name="home_btn" Content="Return&#xD;&#xA; Home" HorizontalAlignment="Right" Height="200" Margin="0,600,-415,0" VerticalAlignment="Top" Width="300" FontFamily="OCR A Extended" FontSize="36" Click="home_btn_Click"/>
        <Label x:Name="projectCodeViewer" Content="" HorizontalAlignment="Left" Height="560" Margin="50,455,0,0" VerticalAlignment="Top" Width="1425" BorderThickness="2,2,2,2" BorderBrush="Black" FontSize="36" FontFamily="OCR A Extended" Grid.ColumnSpan="2"/>
        <ListBox x:Name="MoveCommands_LB" HorizontalAlignment="Left" Height="289" Margin="50,30,0,0" VerticalAlignment="Top" Width="648" SelectionChanged="Movement_List_Populate" Grid.ColumnSpan="2"/>
        <ListBox x:Name="Values_LB" HorizontalAlignment="Left" Height="289" Margin="735,30,0,0" VerticalAlignment="Top" Width="328"/>
        <Button Content="Add Command" HorizontalAlignment="left" Height="289" Margin="1100,30,-53,0" VerticalAlignment="Top" Width="428" FontSize="48"/>
    </Grid>

在 XAML 中,如果您想在 window 上自动放置任何类型的 Object,(在我看来)非常不鼓励设置可能使您Objects 出界了。

你还必须考虑你想把它们放在哪里,以及当你调整它们的大小时它们应该如何反应,例如,如果你有一个 header 应该使用整个 Width Parent 控件(在本例中为 Window),那么它应该没有 WidthHorizontalAlignment 设置为 Stretch 并且没有 Margins(除了如果你想让它从各个方面都有一个免费的 space)

另一个示例是用于关闭 Window 的按钮,最佳做法是将其实际放置在右下角,并将 HorizontalAlignment 设置为 Right 并且VerticalAlignment 设置为 Bottom 没有边距,除了像上面那样,你想让它的边角有一些填充。

这样,当您调整大小时,一切都完美地流向相对于 Window 大小的位置,保持相同的比例,这里是我上面解释的示例:

<Grid>
    <Label Content="Header" VerticalAlignment="Top" FontSize="20" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Height="50" BorderThickness="3" BorderBrush="Black" Background="Beige"/>
    <!-- Inside this Grid we insert the Body -->
    <Grid Margin="5,55,5,60" Background="LightGray" >
        <Grid.Effect>
            <DropShadowEffect />
        </Grid.Effect>
        <Label Content="Hello World!" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="50" />
    </Grid>
    <Button Content="Exit" VerticalAlignment="Bottom" HorizontalAlignment="Right" Height="50" Width="100" Margin="0,0,5,5" />
</Grid>

我上面所做的仍然不是你如何解决它的最好方法,因为我正在设置边距而不是定义 "set structure",为此 Grid object有一个很棒的功能,ColumnDefinitionsRowDefinitions,下面是相同的代码,但这些定义帮助我在我的 XAML 结构中定义部分:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="50" />
        <RowDefinition />
        <RowDefinition Height="50" />
    </Grid.RowDefinitions>
    <Label Content="Header" Grid.Row="0" VerticalAlignment="Top" FontSize="20" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Height="50" BorderThickness="3" BorderBrush="Black" Background="Beige"/>
    <!-- Inside this Grid we insert the Body -->
    <Grid Grid.Row="1" Margin="5,5,5,10" Background="LightGray" >
        <Grid.Effect>
            <DropShadowEffect />
        </Grid.Effect>
        <Label Content="Hello World!" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="50" />
    </Grid>
    <Button Content="Exit" Grid.Row="2" VerticalAlignment="Bottom" HorizontalAlignment="Right" Height="50" Width="100" Margin="0,0,5,5" />
</Grid>

所以你所要做的就是像我一样构建你正在制作的可调整大小的布局,然后你就完成了。