【问题标题】:Dock elements on form将元素停靠在表单上
【发布时间】:2017-08-27 02:13:55
【问题描述】:

我正在尝试订购一个 WPF 表单以按此顺序停靠

  1. 菜单条
  2. 工具栏
  3. 选项卡控件
  4. 状态栏

如您所见,状态栏位于底部,菜单条位于顶部,然后是工具栏和选项卡控件。通常你可以停靠到用 WinForms 填充,但它非常复杂,当涉及到在 WPF 中执行它时我不太了解它,我想知道是否有人可以帮助我?

我已经让它们全部正确停靠,并水平伸展,但垂直有点混乱,因为 StatusBar 的高度非常高,而 tabControl 的高度有点低,我是如何做到的,WinForms 是如何做到的是吗?

<Window x:Class="Proxy_Scraper.MainWindow"
        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:Proxy_Scraper"
        mc:Ignorable="d"
        Title="MainWindow" Height="377.5" Width="811.578">
    <Grid>
        <DockPanel>
            <Menu DockPanel.Dock="Top" HorizontalAlignment="Stretch">
                <MenuItem Header="MenuItem" Height="100" Width="100"/>
            </Menu>
            <ToolBar DockPanel.Dock="Top" HorizontalAlignment="Stretch"/>
            <TabControl DockPanel.Dock="Top" HorizontalAlignment="Stretch" VerticalAlignment="Center">
                <TabItem Header="TabItem">
                    <Grid Background="#FFE5E5E5"/>
                </TabItem>
                <TabItem Header="TabItem">
                    <Grid Background="#FFE5E5E5"/>
                </TabItem>
            </TabControl>
            <StatusBar DockPanel.Dock="Bottom" HorizontalAlignment="Stretch">
                <StatusBarItem>
                    <TextBlock>fff</TextBlock>
                </StatusBarItem>
            </StatusBar>
        </DockPanel>
    </Grid>
</Window>

【问题讨论】:

  • 您可以使用 Grid 插入行。例如:菜单项为 25,工具栏为 50,Tab 控件为 *,状态栏为 25。或全部为自动,TabControl 为 *

标签: wpf winforms


【解决方案1】:

如果您将 DockPanel 的 LastChildFill 属性设置为 True,则您最后声明的子元素将获得所有剩余空间。 所以正确的策略是首先声明你想要固定大小的所有元素(MenuToolBarStatusBar),最后一个(我认为TabControl)将填充剩余的空间:

<DockPanel  LastChildFill="True">
        <Menu DockPanel.Dock="Top" HorizontalAlignment="Stretch">
            <MenuItem Header="MenuItem" Height="100" Width="100"/>
        </Menu>
        <ToolBar DockPanel.Dock="Top" HorizontalAlignment="Stretch"/>
        <StatusBar DockPanel.Dock="Bottom" HorizontalAlignment="Stretch">
            <StatusBarItem>
                <TextBlock>fff</TextBlock>
            </StatusBarItem>
        </StatusBar>
        <TabControl DockPanel.Dock="Top" HorizontalAlignment="Stretch" VerticalAlignment="Center">
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
        </TabControl>

    </DockPanel>

注意:对于复杂的布局,您可以轻松嵌套多个DockPanels

【讨论】:

  • 您好,我在工具栏底部和 tabControl 顶部之间有一个很大的空白,我该如何解决?
  • @l746577 从TabControl 中删除VerticalAlignment="Center"(或使用="Stretch")。基本上你可以删除所有水平/对齐属性分配,因为默认值应该适合你。
猜你喜欢
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多