2009-10-21 38 views
9

我有以下简化的WPF网格,两列,每列中有一个按钮,第一列自动调整大小,并且允许列大小调整。 在拆分器MouseDoubleclick事件上设置事件处理程序。当分离器点击时左侧列中的按钮被折叠。WPF网格 - 当内容可见性设置为可见时,自动调整大小的列不可折叠。已收录

现在,因为第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; 
    } 

回答

8

发生了什么事是,当你调整行/列宽/高与GridSplitter,它将该列/行的ActualHeight(或ActualWidth的)。

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

让我更新这个。

-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> 
+1

问题不在于使用扩展器,而是为了解决问题。 – esylvestre 2010-07-23 15:38:55

+0

@esylvestre吧? – Carlo 2010-07-23 18:19:45

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> 
相关问题