WPF 그리드 - 콘텐츠 가시성으로 설정된 경우 자동 크기의 열이 붕괴되지 않음.

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

  •  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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top