我有一个 3 列网格,其中有:
- 一个 ContentControl,其内容不适合并被剪裁。
- GridSplitter
- 具有最小宽度的第三列
这是代码:
<Window x:Class="TestGridWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" MinWidth="900" Width="900">
<Grid Grid.Column="2" x:Name="Grid2">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Panel1Col" Width="2000*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition x:Name="Panel2Col" Width="*" MinWidth="200"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ContentControl x:Name="ContentControl" Grid.Column="0" BorderThickness="5">
<Rectangle Width="1800" Height="500" HorizontalAlignment="Left" VerticalAlignment="Top" Fill="Green"></Rectangle>
</ContentControl>
<GridSplitter Grid.Column="1" Width="5"></GridSplitter>
<Border Grid.Column="2" BorderBrush="Blue" BorderThickness="5"></Border>
</Grid>
</Window>
在列的最小宽度固定的情况下,当我缩小窗口时,第一列会稍微缩小,但网格会大于窗口,并且第三列会被剪裁。
为什么要这么做?我该如何解决这个问题?
最佳答案
您的网格
配置:
- 第 3 列具有星形宽度,最小宽度为 200。
- 第一列的星形宽度为 2000。这意味着宽2000倍 比第三列的最小宽度为 200。
- 窗口本身的默认宽度仅为 900
以上配置似乎有问题。没有足够的空间来正确渲染所有列(需要窗口宽度至少为 200 + (2000*200) + 5
)。
最终结果,WPF 将此配置呈现为:
- 第一列几乎占据了
Grid
的全部宽度。 - 第三列仍然以 200 宽度呈现,但只有最少量的部分(第一列宽度的 1/2000)位于
Grid
内部,其余部分呈现于Grid 外部
在右边。
渲染布局:
但是如何准确修复它,取决于您想要实现的目标(最有意义的是减少第一列的宽度)。我希望这个解释可以帮助您更好地决定如何修复布局。
关于c# - 网格内的 ContentControl 无法正确调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23151562/