自动调整c# WPF窗口的大小,任何较小的窗口都会从屏幕上消失

本文关键字:窗口 屏幕 消失 任何较 调整 WPF | 更新日期: 2023-09-27 18:17:06

我试图设置WPF窗口根据分辨率调整大小,但是,我似乎无法得到它的权利。谁有什么建议或文章,我应该读吗?

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

这段代码在1920 * 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>

自动调整c# WPF窗口的大小,任何较小的窗口都会从屏幕上消失

在XAML中,如果你想在你的窗口上自动定位任何类型的对象,这是非常不鼓励(在我看来)设置可能使你的对象超出边界的边距。

你还必须考虑你想要定位他们,他们应该如何反应,当你调整他们的大小,例如,如果你有一个标题,应该使用整个父控件的Width(在这种情况下窗口),那么它应该没有Width, HorizontalAlignment设置为Stretch和没有Margins(除非你想让它有一个自由的空间从各个方面)

另一个例子是一个按钮,用来关闭你的窗口,最好的做法是把它放在右下角,HorizontalAlignment设置为Right, VerticalAlignment设置为Bottom,没有边距,除非像上面一样,你想让它有一些填充的角落。

这样,当你调整大小时,所有的东西都完美地流动到相对于窗口大小的地方,保持相同的比例,这里是我上面解释的一个例子:

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

我上面所做的仍然不是你如何解决它的最佳方式,因为我设置了边距,而不是定义一个"设置结构",因为Grid对象有一个伟大的功能,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>

所以你要做的就是构建你正在创建的可调整大小布局就像我刚才做的那样你已经设置好了