使用 MinWidth 调整 WPF GridSplitter 大小

WPF GridSplitter sizing with MinWidth

我正在尝试制作一个非常简单的两列 window,其中右列从宽度 150 开始,最小宽度为 150,左列填充剩余的 space,最小宽度为 300,GridSplitter 允许调整两列的大小。

我 运行 这里有两个问题。

  1. 当试图将 GridSplitter 向左拖动超过左列的 MinWidth 允许的范围时,GridSplitter 按预期停止,但右列不断增长并溢出 window 并被剪掉。

  2. 当为 window 本身指定 MinWidth 时(等于两个内容列的 MinWidth 加上 GridSplitter 的列),我可以调整 window 比我应该能够做到的稍微小一点(可能小 5-10 个像素),导致右栏的一些内容被剪掉。

我需要做一些简单的更改才能正常运行吗?

<Window x:Class="CustomLabels.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:CustomLabels"
        mc:Ignorable="d"
        Title="Custom Labels" Height="350" Width="550" MinWidth="455" MinHeight="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" MinWidth="300" />
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="150" MinWidth="150" />
        </Grid.ColumnDefinitions>
        <TextBox x:Name="textBox" Height="23" Margin="81,14,90,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Grid.Column="0"/>
        <Label x:Name="label" Content="Order No." HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" FontWeight="Bold" Grid.Column="0"/>
        <Button x:Name="button" Content="Load" Margin="0,14,10,0" VerticalAlignment="Top" Height="23" HorizontalAlignment="Right" Width="75" Grid.Column="0"/>

        <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center" VerticalAlignment="Stretch" />

        <Label x:Name="label1" Content="Label" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" FontWeight="Bold" Width="47" Grid.Column="2" />
        <ListBox x:Name="listBox" Margin="10,41,10,10" IsSynchronizedWithCurrentItem="True" Grid.Column="2" />
    </Grid>
</Window>

请注意,我已尝试实施 this question 中所示的解决方案,但当我希望 right 列开始时,它似乎没有任何效果固定宽度。

愚蠢的 XAML 技巧来拯救。这看起来有点愚蠢,但给出的结果足够接近所需的结果:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*" MinWidth="300" />
        <ColumnDefinition Width="5" />
        <ColumnDefinition Width="0*" MinWidth="150" />
    </Grid.ColumnDefinitions>
    ...
</Grid>

我猜这是在告诉它“使用尽可能少的 space,但不要低于 150,这最终成为列的起始大小。

我在缩小 window 时仍然得到剪裁;这可能是对 padding and/or margin 的某种误解。