Как сделать так, чтобы элемент управления Tab заполнил центр DockPanel в WPF

У меня есть окно WPF с DockPanel, которое содержит меню, TabControl и строку состояния. Я могу заставить меню закрепиться вверху, а строка состояния — внизу, но я не могу заставить элемент управления Tab заполнить область между этими двумя элементами управления.

<Window x:Class="MediaCatalog.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:MediaCatalog"
    mc:Ignorable="d"
    Title="Window1" Height="450" Width="800">
<DockPanel LastChildFill="False">
    <Menu Width="Auto" VerticalAlignment="Top" HorizontalAlignment="Left" 
                        DockPanel.Dock="Top">
    </Menu>
    <TabControl DockPanel.Dock="Top" Margin="0,0,0,0" 
                              BorderThickness="1,1,1,1" Height="291">
    </TabControl>
    <StatusBar DockPanel.Dock="Bottom" Height="22">
        <StatusBar/>
    </StatusBar>
</DockPanel>

person JNickVA1    schedule 09.02.2021    source источник


Ответы (1)


Последний элемент заполнит DockPanel, если вы не установите LastChildFill в false:

<DockPanel>
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="A" />
        <MenuItem Header="B" />
    </Menu>

    <StatusBar DockPanel.Dock="Bottom" Height="22" />

    <TabControl Margin="0,0,0,0" BorderThickness="1,1,1,1">
        <TabItem Header="A" />
        <TabItem Header="B" />
    </TabControl>
</DockPanel>

Обратите внимание, что вы не должны устанавливать присоединенное свойство DockPanel.Dock последнего элемента.

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

Приведенный выше образец разметки заставит TabControl заполнить оставшееся пространство между верхним Menu и нижним StatusBar:

введите здесь описание изображения

person mm8    schedule 09.02.2021
comment
Это решило мою проблему. Я думаю, меня смутил порядок, в котором элементы управления перечислены в DockPanel. Итак, если элемент управления является последним элементом управления, определенным в DocKPanel, и LastChildFill == True, то этот элемент управления заполнит все оставшееся пространство в DockPanel. - person JNickVA1; 09.02.2021