【问题标题】:How to have a Tab control fill the center of a DockPanel in WPF如何在 WPF 中让 Tab 控件填充 DockPanel 的中心
【发布时间】:2021-05-13 07:49:32
【问题描述】:

我有一个带有 DockPanel 的 WPF 窗口,其中包含一个菜单、一个 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>

【问题讨论】:

    标签: wpf dockpanel


    【解决方案1】:

    除非您将LastChildFill 设置为false,否则最后一个元素将填充DockPanel

    <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 附加属性。

    此外,如果您希望 TabControl 填充剩余空间,您不希望为 Height 指定默认值。

    上述示例标记将使TabControl 填充顶部Menu 和底部StatusBar 之间的剩余空间:

    【讨论】:

    • 这解决了我的问题。我想我对控件在 DockPanel 中列出的顺序感到困惑。因此,如果一个控件是 DocKPanel 中定义的最后一个控件,并且 LastChildFill == True,那么该控件将填充 DockPanel 中的所有剩余空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2015-06-18
    • 2011-08-25
    • 2012-04-04
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    相关资源
    最近更新 更多