Viewbox 使用 UniformToFill 切断 window 的底部
Viewbox cuts off bottom of window using UniformToFill
所以我正在开发 C# WPF 应用程序。我希望 MainWindow 始终最大化(它是)。当我开始考虑解决方案时,麻烦就来了。它必须针对不同的屏幕分辨率进行调整。所以,现在我正在使用一个 Viewbox(包含一个网格)。问题是我不能在 ViewBox 的 Stretch 属性 上使用 UniformToFill,因为它切断了 window 的底部。但是,当我使用 "Uniform" 时,它并没有使用整个屏幕(我确实需要)。如何让 UniformToFill 填充 window 但不删除任何内容?我的 Window 代码看起来像这样:
<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
缩放包含的控件,这不是几乎所有 window 的常见行为。通常,您希望您的控件随着周围的 window 展开。例如,文本框的宽度会更长,但包含的文本不会被水平拉伸(看起来很奇怪)。
然而,回答你的问题:也许你想要 <Viewbox Stretch="Fill" .../>
,因为它会将内容拉伸到你的全尺寸,而不管纵横比如何。
请参阅以下代码段,比较几种扩展内容的方法。只需将其粘贴到您的 window 中并检查结果。第一个区域(左上角)仅调整包含的控件的大小,而其他三个区域使用视图框的不同拉伸模式。
<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>
所以我正在开发 C# WPF 应用程序。我希望 MainWindow 始终最大化(它是)。当我开始考虑解决方案时,麻烦就来了。它必须针对不同的屏幕分辨率进行调整。所以,现在我正在使用一个 Viewbox(包含一个网格)。问题是我不能在 ViewBox 的 Stretch 属性 上使用 UniformToFill,因为它切断了 window 的底部。但是,当我使用 "Uniform" 时,它并没有使用整个屏幕(我确实需要)。如何让 UniformToFill 填充 window 但不删除任何内容?我的 Window 代码看起来像这样:
<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
缩放包含的控件,这不是几乎所有 window 的常见行为。通常,您希望您的控件随着周围的 window 展开。例如,文本框的宽度会更长,但包含的文本不会被水平拉伸(看起来很奇怪)。
然而,回答你的问题:也许你想要 <Viewbox Stretch="Fill" .../>
,因为它会将内容拉伸到你的全尺寸,而不管纵横比如何。
请参阅以下代码段,比较几种扩展内容的方法。只需将其粘贴到您的 window 中并检查结果。第一个区域(左上角)仅调整包含的控件的大小,而其他三个区域使用视图框的不同拉伸模式。
<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>