Viewbox使用UniformToFill切断窗口底部

本文关键字:窗口 底部 使用 UniformToFill Viewbox | 更新日期: 2023-09-27 18:34:48

所以我正在开发一个C# WPF应用程序。我希望主窗口始终最大化(确实如此(。当我开始考虑解决方案时,麻烦就来了。它必须针对不同的屏幕分辨率进行调整。所以,现在我正在使用一个视图框(包含一个网格(。问题是我不能在 ViewBox 的拉伸属性上使用 UniformToFill,因为它会切断窗口的底部。但是,当我使用"制服"时,它不会使用整个屏幕(我确实需要(。如何让 制服填充 填满窗口但不剪掉任何东西?我的窗口代码如下所示:

<Window x:Name="AppMenu" x:Class="App.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="App" FontWeight="Bold" Icon="Images/Core-IconSize.ico" WindowStartupLocation="CenterScreen" WindowStyle="ThreeDBorderWindow" WindowState="Maximized" ResizeMode="CanMinimize"">
    <Viewbox Stretch="Uniform" Width="Auto" Height="Auto">
          <Grid x:Name="MyGrid">
             //Controls
          </Grid>
    </Viewbox>
</Window

Viewbox使用UniformToFill切断窗口底部

你很可能应该重新考虑你的布局。Viewbox缩放包含的控件,这几乎不是任何窗口的常规行为。通常,您希望控件随周围的窗口展开。例如,文本框的宽度会更长,但包含的文本不会水平拉伸(看起来很奇怪(。

但是,要回答您的问题:也许您想要 <Viewbox Stretch="Fill" .../> ,因为它将内容拉伸到您的全尺寸,而不管纵横比如何。

请参阅以下代码片段,比较几种扩展内容的方法。只需将其粘贴到窗口中并检查结果即可。第一个区域(左上角(只是调整所包含的 constrol 的大小,而其他三个区域则使用视框的不同拉伸模式。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Border Grid.Column="0" Grid.Row="0" Margin="1" Padding="1" BorderThickness="1" BorderBrush="Gray">
        <TextBox Text="Test Area 1" VerticalAlignment="Center" HorizontalAlignment="Stretch" />
    </Border>
    <Border Grid.Column="1" Grid.Row="0" Margin="1" Padding="1" BorderThickness="1" BorderBrush="Gray">
        <Viewbox Stretch="Uniform">
            <TextBox Text="Test Area 2" />
        </Viewbox>
    </Border>
    <Border Grid.Column="0" Grid.Row="1" Margin="1" Padding="1" BorderThickness="1" BorderBrush="Gray">
        <Viewbox Stretch="Fill">
            <TextBox Text="Test Area 3" />
        </Viewbox>
    </Border>
    <Border Grid.Column="1" Grid.Row="1" Margin="1" Padding="1" BorderThickness="1" BorderBrush="Gray">
        <Viewbox Stretch="UniformToFill">
            <TextBox Text="Test Area 4" />
        </Viewbox>
    </Border>
</Grid>