Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Viewbox使用UniformToFill切断窗口底部_C#_Wpf_Viewbox - Fatal编程技术网

C# Viewbox使用UniformToFill切断窗口底部

C# Viewbox使用UniformToFill切断窗口底部,c#,wpf,viewbox,C#,Wpf,Viewbox,所以我正在开发一个C#WPF应用程序。我希望主窗口总是最大化(就是这样)。当我开始考虑下决心时,麻烦来了。它必须根据不同的屏幕分辨率进行调整。所以,现在我使用一个Viewbox(包含一个网格)。问题是我不能在ViewBox的Stretch属性上使用UniformToFill,因为它会切断窗口的底部。然而,当我使用“制服”时,它不会使用整个屏幕(我真的需要)。如何让UniformToFill填满窗户,但不切割任何东西?我的窗口代码如下所示: <Window x:Name="AppMenu"

所以我正在开发一个C#WPF应用程序。我希望主窗口总是最大化(就是这样)。当我开始考虑下决心时,麻烦来了。它必须根据不同的屏幕分辨率进行调整。所以,现在我使用一个Viewbox(包含一个网格)。问题是我不能在ViewBox的Stretch属性上使用UniformToFill,因为它会切断窗口的底部。然而,当我使用“制服”时,它不会使用整个屏幕(我真的需要)。如何让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
缩放包含的控件,这不是任何窗口的常见行为。通常,您希望控件随周围的窗口展开。例如,文本框的宽度会更长,但包含的文本不会水平拉伸(看起来很奇怪)

但是,要回答您的问题:也许您想要
,因为它可以将内容拉伸到您的全部大小,而不考虑纵横比

有关拉伸内容的几种方法的比较,请参见以下代码段。只需将其粘贴到您的窗口并检查结果。第一个区域(左上)仅调整包含的控件的大小,而其他三个区域使用viewbox的不同拉伸模式

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


感谢您的快速回复。我尝试过
Fill
,但它只是让我的控件看起来很糟糕。@LukeDinkler当然看起来很糟糕,但那是因为当你不加选择地将内容拉伸到窗口大小时,它看起来很糟糕。但是,您明确表示希望将其拉伸到最大尺寸,并抱怨在
UniformToFill
的情况下切断,因此您没有太多的选择余地。但是,正如我所说的,您可能根本不想使用viewbox,这取决于您实际想要归档的内容(听说过)Ok I see。。。但在上面的例子中,您必须为添加到窗口中的每个控件使用边框控件?@LukeDinkler否,我添加了边框,以便网格中每个区域的范围都可见。可以使用示例中任何边框的内容,而不使用周围环境。把它想象成一个4窗口的演示。嗯。。。我将给出一个示例,尝试不要使用
Viewbox
作为主要布局容器。虽然有些人认为这是一种合理的方法,但它造成了一种类似于当年移动设备必须处理的情况,当时网页会在其上缩放,而不是调整其布局。@B.K.是的,明白了。谢谢