9

我有以下简单的 WPf 网格、两列、每列中的一个按钮、第一列自动调整大小和一个拆分器以允许调整列大小。在拆分器 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;
    }
4

3 回答 3

8

发生的情况是,当您使用 GridSplitter 调整列/行宽度/高度时,它会设置列/行的 ActualHeight(或 ActualWidth)。

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

让我更新这个。

于 2010-07-23T15:41:50.473 回答
0

就我而言,我能够使用 StackPanels 并设置Visibility="Collapsed"它使其正确调整大小。

<StackPanel Orientation="Vertical" Margin="5">
    <StackPanel Orientation="Horizontal">
      <!-- Some controls -->
    </StackPanel>
    <StackPanel Orientation="Horizontal" Visibility="{Binding YourVisibilityProperty}">
      <!-- Some controls -->
    </StackPanel>
</StackPanel>
于 2014-11-21T17:43:04.437 回答
-3

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

<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>
于 2009-10-21T17:11:50.053 回答