WPF网格-当内容可见性设置为可见性时,自动调整大小的列不会折叠。折叠

WPF网格-当内容可见性设置为可见性时,自动调整大小的列不会折叠。折叠,wpf,grid,visibility,Wpf,Grid,Visibility,我有下面的simlpwpfgrid,两列,每列中有一个按钮,第一列自动调整大小,还有一个允许调整列大小的拆分器。 在拆分器MouseDoubleclick事件上设置事件处理程序。双击拆分器时,左列中的按钮将折叠 现在,由于列1是自动调整大小的,并且内容是折叠的,我希望此时列1应该被有效地隐藏,但是它不是。 尽管其内容已折叠,但列大小不会更改(请记住,列已自动调整大小) 对我来说似乎很奇怪,我想让柱子倒塌——知道这里发生了什么吗 <Window x:Class="KingLayout.Win

我有下面的simlpwpfgrid,两列,每列中有一个按钮,第一列自动调整大小,还有一个允许调整列大小的拆分器。 在拆分器MouseDoubleclick事件上设置事件处理程序。双击拆分器时,左列中的按钮将折叠

现在,由于列1是自动调整大小的,并且内容是折叠的,我希望此时列1应该被有效地隐藏,但是它不是。 尽管其内容已折叠,但列大小不会更改(请记住,列已自动调整大小)

对我来说似乎很奇怪,我想让柱子倒塌——知道这里发生了什么吗

<Window x:Class="KingLayout.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
        </Grid.RowDefinitions>
        <Button x:Name="leftButton">Left</Button>
        <Button Grid.Column="1" Margin="5,0,0,0">Right</Button>
        <GridSplitter Name="verticalSplitter" ShowsPreview="True" Grid.RowSpan="1" Grid.Column="1" HorizontalAlignment="Left"
                      VerticalAlignment="Stretch" Width="5" MouseDoubleClick="verticalSplitter_MouseDoubleClick"/>
    </Grid>
</Window>


    private void verticalSplitter_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        leftButton.Visibility = leftButton.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
    }

左边
赖特
私有void垂直拆分器_MouseDoubleClick(对象发送器,MouseButtonEventArgs e)
{
leftButton.Visibility=leftButton.Visibility==Visibility.Visibility?Visibility.collazed:Visibility.Visible;
}

这是因为拆分器保持其在网格中的位置,它拉动第一列,为什么不试试扩展器呢

<Grid ShowGridLines="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
    </Grid.RowDefinitions>
    <Expander ExpandDirection="Left">
        <Button x:Name="leftButton">Left</Button>
    </Expander>
    <Button Grid.Column="1" Margin="5,0,0,0">Right</Button>
</Grid>

左边
赖特

使用GridSplitter调整列/行宽度/高度时,它会设置列/行的实际高度(或实际宽度)

当控件折叠时,应该使用触发器将行的高度设置为自动(或零)


让我更新这个。

在我的例子中,我能够使用StackPanels并设置
Visibility=“Collapsed”
,从而使其正确调整大小

<StackPanel Orientation="Vertical" Margin="5">
    <StackPanel Orientation="Horizontal">
      <!-- Some controls -->
    </StackPanel>
    <StackPanel Orientation="Horizontal" Visibility="{Binding YourVisibilityProperty}">
      <!-- Some controls -->
    </StackPanel>
</StackPanel>


问题不在于使用扩展器,而在于解决问题。这看起来像是一个bug,因为当右列的“所有可用宽度”大小(*)为时,也会出现同样的笨拙行为。如果网格内的内容已调整大小/隐藏,则网格必须重新调整列宽。