【问题标题】:Gridsplitter prevents grid columns to be resizedGridsplitter 防止调整网格列的大小
【发布时间】:2012-12-22 05:47:06
【问题描述】:

单击Button 时,我试图隐藏Grid 的前两列。我的Grid 布局有 3 列,一列带有网格,第二列带有网格拆分器,第三列带有另一列 Grid,其中 Button

当我使用下面的代码运行我的程序时,它会按预期正确折叠Button 的前两列并调整第三个网格的大小,但是当我使用拆分器调整网格大小时,这不起作用了。它隐藏了列,但是第三列没有调整大小以填充Window。我希望前 2 列折叠起来,第三列填满窗口的整个区域(如果我不使用拆分器调整大小,就会发生这种情况)。

xaml 如下:

<Grid>
    <ColumnDefinition Width="Auto" x:Name="column1"/>
    <ColumnDefinition Width="Auto" x:Name="column2"/>
     <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<Grid Grid.Column="0" x:Name="left" MinWidth="100">
    <Border Background="Red" Margin="5"/>
    <TextBlock Text="A Brown fox jumped oversomething" Width="{Binding ActualWidth, ElementName=TreeView}" Margin="5"></TextBlock>
</Grid>

<GridSplitter x:Name="splitter"
            Width="5"
            Grid.Column="1"
            HorizontalAlignment="Left"
            Margin="0,5,0,5"
            Panel.ZIndex="1"
            VerticalAlignment="Stretch"                
            ResizeDirection="Columns"/>

<Grid Grid.Column="2">        
    <Grid Grid.Column="0" Grid.Row="0">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="20"></RowDefinition>
        </Grid.RowDefinitions>
        <Border Grid.Row="0" Background="Green" Margin="5"/>
        <Button Grid.Row="1" Click="OnClick">HideAndResize</Button>
    </Grid>
</Grid>
</Grid>

Button.click 事件处理如下:

private bool clicked;

private void OnClick(object sender, RoutedEventArgs e)
{
    clicked = !clicked;

    left.Visibility = clicked ? Visibility.Collapsed : Visibility.Visible;
    splitter.Visibility = clicked ? Visibility.Collapsed : Visibility.Visible;

}

【问题讨论】:

    标签: wpf button grid gridsplitter


    【解决方案1】:

    似乎 Column 没有正确自动调整大小,所以它仍然不是 0,即使它的子项 Visibility 设置为 Collapsed。

    一个快速而肮脏的解决方案是:

        private bool clicked;
        private double oldLenght;
        private void OnClick(object sender, RoutedEventArgs e)
        {
            clicked = !clicked;
    
            splitter.Visibility = clicked ? Visibility.Collapsed : Visibility.Visible;
            left.Visibility = clicked ? Visibility.Collapsed : Visibility.Visible;
            oldLenght = clicked ? column1.ActualWidth : oldLenght;
            column1.Width = clicked ? new GridLength(0.0) : new GridLength(oldLenght);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2011-04-21
      相关资源
      最近更新 更多