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