代码之家  ›  专栏  ›  技术社区  ›  Aaron Lerch

如何防止网格拆分器在窗口边界之外调整列的大小?

  •  1
  • Aaron Lerch  · 技术社区  · 16 年前

    我有如下所示的XAML(例如)。如果将网格拆分器拖到最左边,并继续拖动鼠标,则右侧列的大小将在窗口边界之外增长—显然不是我想要的。

    问题是,我不能在右边的列上设置硬MaxWidth,因为用户可以调整窗口的大小,从而增加该列的可用空间。 到目前为止,我认为我需要将右边列的MaxWidth绑定到窗口的工作区减去左边的MinWidth再加上拆分列的宽度。但如果可能的话,我想避免。思想?

    <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Width="450"
            Height="300">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" MinWidth="100" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="200" MinWidth="200" />
            </Grid.ColumnDefinitions>
    
            <Grid Grid.Column="0">
                <Button>Monkey</Button>
            </Grid>
    
            <GridSplitter Grid.Column="1" Width="7" ResizeBehavior="PreviousAndNext" />
    
            <Grid Grid.Column="2" Margin="4">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
    
                <GroupBox Grid.Row="0" Header="Spaghetti" Margin="0, 0, 0, 5">
                    <ComboBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch">Noodles</ComboBox>
                </GroupBox>
    
                <Expander Grid.Row="1" Header="Batman" IsExpanded="True" Margin="0, 0, 0, 5">
                    <Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch">Batman!</Button>
                </Expander>
            </Grid>
        </Grid>
    </Window>
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   xr280xr    15 年前

    我也有同样的问题。也许这是一个部分的答案。我将正在扩展的列的最大宽度绑定到其网格的实际宽度。目标是拆分器永远不会超过其网格的大小。绑定工作正常,但并没有达到目标,因为一旦我的网格拆分器到达网格的边缘,当我拖动拆分器时,网格开始变大。如果我们可以使网格不使用拆分器调整大小,这应该可以工作。