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

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

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Решение

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

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

Сообщите мне об этом.

Другие советы

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

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

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

<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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top