WPF Grid - Auto Größe Spalte kollabiert nicht, wenn der Inhalt Sichtbarkeit auf Visibility.Collapsed

StackOverflow https://stackoverflow.com/questions/1601171

  •  05-07-2019
  •  | 
  •  

Frage

I die folgenden simpl WPf Gitter haben, zwei Spalten, eine Schaltfläche in jeder Spalte, wobei die erste Spalte automatisch bemessen und ein -Splitterkolonne Ändern der Größe zu ermöglichen. Ein Event-Handler auf dem Splitter Mousedoubleclick-Ereignis eingerichtet. Wenn der Splitter Doulble ist geklickt der Knopf in der linken Spalte ausgeblendet ist.

Jetzt, da Spalte 1 auto Größe ist und der Inhalt kollabiert ist ich an dieser Stelle erwarten würde, die Spalte 1 effektiv ausgeblendet werden soll, ist es aber nicht. Obwohl ihr Inhalt kollabiert ist die Spaltengröße nicht ändert (remeber Spalte autosized).

Es scheint mir fremd, ich die Spalte kollabieren möchten - eine Ahnung, was hier geschieht

<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;
    }
War es hilfreich?

Lösung

Was passiert ist, dass, wenn Sie die Spalte / Zeile Breite / Höhe mit dem Gridsplitter Größe ändern, es die Actual (oder Actual) der Spalte / Zeile setzt.

Sie sollten einen Trigger verwenden Zeilenhöhe auf Auto zu setzen (oder Null), wenn Ihre Steuerung kollabiert ist.

Lassen Sie mich mit dieser aktualisiert.

Andere Tipps

In meinem Fall konnte ich StackPanels verwenden und die Visibility="Collapsed" Einstellung, die es verursacht, um richtig die Größe neu.

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

Es ist, weil der Splitter seine Position im Netz hält, ist es die erste Spalte zieht, warum Sie einen Expander nicht versuchen?

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top