Как расширить элементы в 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 выполняет все расчеты размера на основе доступного пространства.

Обновлять:

Кроме того, по моему опыту, помещение тела окна в представление и наличие только представления в окне улучшает работу автоматического размера.

По какой-то причине размещение всех дочерних элементов непосредственно в окне не позволяет автоматически изменять размер.

Обновление 2:

Я бы удалил явный атрибут DockPanel.Dock из элемента, который вы хотите растянуть (заполнить) неиспользуемым пространством.

Установите для свойств ширины и высоты значение «авто».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top