WPF 그리드 - 콘텐츠 가시성으로 설정된 경우 자동 크기의 열이 붕괴되지 않음.
-
05-07-2019 - |
문제
다음과 같은 단순한 WPF 그리드, 두 개의 열, 각 열에 버튼, 첫 번째 열 자동 크기 및 열 크기 조정을 허용하는 스플리터가 있습니다. Splitter Mousedoubleclick 이벤트에 이벤트 핸들러가 설정됩니다. 스플리터가 Doulble을 사용하면 왼쪽 열의 버튼이 무너집니다.
이제 열 1 열이 자동 크기이고 컨텐츠가 무너 지면서이 시점에서 열 1은 효과적으로 숨겨져 있어야하지만 그렇지 않습니다. 내용이 붕괴되지만 열 크기가 변경되지 않습니다 (Remeber 열은자가 화).
나에게 이상해 보인다. 칼럼이 무너지기를 원한다 - 여기서 무슨 일이 일어나고 있는지 아십니까?
<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;
}
해결책
일어나는 일은 그리드 스플리터로 열/행 너비/높이를 크기를 조정할 때 열/행의 실제 높이 (또는 실제 전체)를 설정한다는 것입니다.
트리거를 사용하여 컨트롤이 무너지면 행의 높이를 자동으로 (또는 0) 설정해야합니다.
이것으로 업데이트하십시오.
다른 팁
제 경우에는 스택 패널을 사용할 수 있었고 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>
제휴하지 않습니다 StackOverflow