2009-10-21 15 views
9

Mam następujący Simpl WPF siatki, dwie kolumny, przycisk w każdej kolumnie, pierwsza kolumna auto wielkości i rozdzielacza aby umożliwić zmianę rozmiaru kolumny. Program obsługi zdarzeń jest skonfigurowany na zdarzeniu MouseDoubleclick rozdzielacza. Kiedy splitter jest doulble kliknięty przycisk w lewej kolumnie jest zwinięty.Siatka WPF - Auto wielkości kolumny nie zawaleniem gdy zawartość Widoczność ustawiona Visibility.Collapsed

Teraz, gdy kolumna 1 jest auto wielkości i zawartości jest zwinięty Spodziewam się, że w tym momencie kolumna 1 powinna być skutecznie ukryte, jednak tak nie jest. Mimo że zawartość jest zwinięta, rozmiar kolumny nie ulega zmianie (kolumna z zapamiętywaniem jest autosynchronizowana).

wydaje się dziwne dla mnie, chciałbym kolumnę do upadku - żadnego pojęcia, co tu się dzieje?

<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; 
    } 

Odpowiedz

8

Co się dzieje jest to, że przy zmianie rozmiaru kolumny/wiersza szerokość/wysokość z GridSplitter, ustawia ActualHeight (lub ActualWidth) kolumny/wiersza.

Należy użyć wyzwalacza ustawić wysokość wiersza do AUTO (lub zera), gdy kontrola jest zwinięta.

Proszę o informacje.

-3

Dzieje się tak, ponieważ splitter utrzymuje swoją pozycję w siatce, ciągnie pierwszą kolumnę, dlaczego nie spróbujesz ekspandera?

<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

Problem dotyczy nie używania ekspandera, chodzi o naprawienie problemu. – esylvestre

+0

@esylvestre huh? – Carlo

0

W moim przypadku był w stanie wykorzystać StackPanels i ustawienie Visibility="Collapsed", który spowodował, że do prawidłowego rozmiaru.