2009-10-21 22 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> 
相關問題