DockPanel의 항목을 WPF의 사용 가능한 모든 공간에 맞게 확장하는 방법은 무엇입니까?

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

  •  13-09-2019
  •  | 
  •  

문제

나는 StackPanel 다음을 포함하는 StackPanel 그리고 다른 항목들.첫번째 StackPanel 수직 방향이 있고 내부는 수평 방향입니다.내부에는 TreeView 그리고 ListView, 창에서 설정한 창 너비에 맞춰 확장하고 사용자가 변경할 수 있도록 하고 싶습니다.아우터도 좋겠다 StackPanel 창문 높이에 맞게어떻게 해야 하나요?

편집하다:나는 DockPanel, 그리고 저는 DockPanel.Dock 각 요소의 속성을 올바르게 설정하고 비활성화했습니다. LastChildFill 두 도킹 패널 모두에서 레이아웃이 여전히 늘어나지 않습니다.

코드:

<Window x:Class="Clippy.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged">
    <DockPanel Name="wrapperDockPanel" LastChildFill="False">
        <Menu Height="22" Name="mainMenu" Width="Auto" DockPanel.Dock="Top" />
        <ToolBar Height="26" Name="mainToolBar" Width="Auto" DockPanel.Dock="Top" />
        <DockPanel Height="Auto" Name="contentDockPanel" DockPanel.Dock="Top" LastChildFill="False">
            <TreeView Name="categoryTreeView" />
            <ListView Name="clipListView" />
        </DockPanel>
        <StatusBar Height="23" Name="mainStatusBar" DockPanel.Dock="Top" />
    </DockPanel>
</Window>
도움이 되었습니까?

해결책

이렇게 해야 합니다. TreeView와 ListView가 기본 보기를 50/50으로 공유하도록 설정했습니다.원하지 않으면 '자동'과 '*' 등으로 설정하세요."LastChildFill"을 활용해 보세요!

<Window x:Class="Clippy.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged">

    <DockPanel LastChildFill="True">
        <Menu Width="Auto" DockPanel.Dock="Top" />
        <ToolBar Width="Auto" DockPanel.Dock="Top" />
        <StatusBar DockPanel.Dock="Bottom" />

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="0.5*" />
                <RowDefinition Height="0.5*" />
            </Grid.RowDefinitions>

            <TreeView Name="categoryTreeView" Grid.Row="0" />
            <ListView Name="clipListView" Grid.Row="1" />
        </Grid>
    </DockPanel>

</Window>

다른 팁

대신 DockPanel을 사용하세요.StackPanel은 표시 공간에 대해 명시적으로 신경 쓰지 않는 반면 DockPanel은 사용 가능한 공간을 기반으로 모든 크기 계산을 수행합니다.

업데이트:

또한 내 경험에 따르면 창 본문을 뷰에 넣고 창에 뷰만 있으면 자동 크기 조정 환경이 더 좋아집니다.

어떤 이유에서든 모든 자식을 Window에 직접 배치하는 것은 자동 크기 조정이 잘 되지 않는 것 같습니다.

업데이트 2:

사용하지 않는 공간을 늘리거나 채우려는 요소에서 명시적인 DockPanel.Dock 특성을 제거하겠습니다.

너비 및 높이 속성을 "자동"으로 설정

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