문제

버튼과 목록 상자라는 두 가지 요소가있는 수직 스택 패널이 있습니다. ListBox를 나머지 페이지 높이까지 어떻게 스트레칭 할 수 있습니까?

<StackPanel Height="Auto" Width="Auto">
    <Button Height="30" Width="100" Content="Get Content" x:Name="GetContent"/>
    <ListBox Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
</StackPanel>

그리드 컨테이너를 사용하여 작동하도록했습니다.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Button Width="100" Height="30" Content="Get Content" Click="OnGetContent" Grid.Row="0" Grid.Column="0"/>
    <data:DataGrid x:Name="MyContent" Margin="0,5" Grid.Row="1" Grid.Column="0"/>
</Grid>
도움이 되었습니까?

해결책

글쎄, 당신은 이미 해결책을 찾았습니다.) 스택 패널은 크기가 항상 자식 요소의 필요한 크기와 동일하기 때문에 기본적으로 남은 공간을 채우지 않습니다. 그리드는 브라우저 크기가 변경 될 때 동적으로 크기를 조정하기 때문에 이동하는 좋은 방법입니다. DockPanel 사용에 대한 Mark의 대답도 잘 작동합니다. 다른 방법은 부모의 크기가 변경 될 때 요소를 수동으로 크기로 크기를 조정하는 것입니다. 일반적으로 외부 레이아웃을위한 그리드를 고수하고 스택 패널 및 기타 컨트롤로 채우면 설정해야합니다.

다른 팁

당신은 a를 사용할 수 있습니다 DockPanel. 첫 번째 항목을 도킹 상단으로 설정하고 두 번째 항목은 도킹 채우기 또는 LastChildFill 재산:

<toolkit:DockPanel LastChildFill="True"
 xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit">    
    <Button DockPanel.Dock="Top" Height="30" Width="100" 
     Content="Get Content" x:Name="GetContent"/>
    <ListBox Background="Azure" />
</toolkit:DockPanel>

제임스의 관찰에 동의합니다. 이것이 바로 일어나는 일이지만 이것은 예상 결과가 아닙니다.

이 명령이 왜 가장 작은 공간으로 내용물을 압축하는지 알 수 있습니다.

<StackPanel Height="Auto" Width="Auto">

그러나 ... StackPanel은 수평 정렬 인수를 받아들입니다. 선택한 경우 스택 패널이 모 컨테이너의 내용을 채우게됩니다. 이것은 오리엔테이션 = "수직"을 설정할 때 정확히 발생합니다. 이 경우 StackPanel은 사용 가능한 수평 공간의 양을 결정하고 어린이 컨트롤에 할당 할 것임을 관찰하십시오.

<StackPanel Height="30" Orientation="Vertical" HorizontalAlignment="Stretch" > 
   <TextBox /> <!--TextBox fills entire space-->
</StackPanel>

오리엔테이션 = "수평"만으로 수평 어린이 크기가 무너지는 경우에만 해당됩니다.

<StackPanel Height="30" Orientation="Horizontal" HorizontalAlignment="Stretch" > 
   <TextBox /> <!--TextBox fills smallest space available-->
</StackPanel>

StackPanel 대신 UniformGrid 열 = "2"를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top