WPF GridSplitter使用MinWidth调整大小

时间:2017-04-20 13:45:11

标签: .net wpf xaml .net-4.5

我正在尝试创建一个非常简单的双列窗口,其中右列从宽度150开始,最小宽度为150,左列填充剩余空间,最小宽度为300,并且GridSplitter允许调整两列的大小。

我在这里遇到两个问题。

  1. 当尝试将GridSplitter向左拖动多于左列的MinWidth允许时,GridSplitter会按预期停止,但右列会不断增长并溢出窗口的右边界并被剪裁。

  2. 当为窗口本身指定MinWidth(它等于两个内容列的MinWidth加上GridSplitter的列)时,我可以调整窗口大小比我应该的小一些(也许5-10像素),导致一些右列的内容被剪裁。

  3. 我需要进行一些简单的更改才能使其正常运行吗?

    <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 列以固定宽度开始时,它似乎没有任何效果。

1 个答案:

答案 0 :(得分:2)

愚蠢的XAML诀窍来救援。这看起来有点愚蠢,但给出了足够接近预期结果的东西:

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

我猜这是在说“尽量使用尽可能少的空间,但不要低于150,这最终会成为列的起始大小。

缩小窗户时,我仍然在剪裁;这可能是对填充和/或边际的某种误解。