Сетка WPF - столбец с автоматическим размером не сворачивается, когда для параметра Видимость содержимого установлено значение Видимость. Свернуто - PullRequest
9 голосов
/ 21 октября 2009

У меня есть следующая упрощенная сетка 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;
    }

Ответы [ 3 ]

8 голосов
/ 23 июля 2010

Происходит следующее: когда вы изменяете ширину / высоту столбца / строки с помощью GridSplitter, он устанавливает ActualHeight (или ActualWidth) столбца / строки.

Вы должны использовать триггер, чтобы установить высоту строки на авто (или ноль), когда ваш контроль свернут.

Получите мне обновление с этим.

0 голосов
/ 21 ноября 2014

В моем случае я смог использовать StackPanels и установить Visibility="Collapsed", что привело к правильному изменению размера.

<StackPanel Orientation="Vertical" Margin="5">
    <StackPanel Orientation="Horizontal">
      <!-- Some controls -->
    </StackPanel>
    <StackPanel Orientation="Horizontal" Visibility="{Binding YourVisibilityProperty}">
      <!-- Some controls -->
    </StackPanel>
</StackPanel>
0 голосов
/ 21 октября 2009

Это потому, что сплиттер сохраняет свою позицию в сетке, он тянет первый столбец, почему бы вам не попробовать расширитель?

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...