使用 MinWidth 调整 WPF GridSplitter 大小
WPF GridSplitter sizing with MinWidth
我正在尝试制作一个非常简单的两列 window,其中右列从宽度 150 开始,最小宽度为 150,左列填充剩余的 space,最小宽度为 300,GridSplitter 允许调整两列的大小。
我 运行 这里有两个问题。
当试图将 GridSplitter 向左拖动超过左列的 MinWidth 允许的范围时,GridSplitter 按预期停止,但右列不断增长并溢出 window 并被剪掉。
当为 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 的某种误解。
我正在尝试制作一个非常简单的两列 window,其中右列从宽度 150 开始,最小宽度为 150,左列填充剩余的 space,最小宽度为 300,GridSplitter 允许调整两列的大小。
我 运行 这里有两个问题。
当试图将 GridSplitter 向左拖动超过左列的 MinWidth 允许的范围时,GridSplitter 按预期停止,但右列不断增长并溢出 window 并被剪掉。
当为 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 的某种误解。