DockPanel是WPF中最常用的布局控件之一,它允许子元素沿着面板的边缘停靠。与WinForm中的Dock属性类似,但功能更加强大和灵活。DockPanel可以让子元素依次停靠在上、下、左、右四个方向,最后一个子元素默认会填充剩余空间。
XML<Window x:Class="AppDockPanel.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:AppDockPanel"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<DockPanel>
<!-- 顶部按钮 -->
<Button DockPanel.Dock="Top" Height="30">顶部按钮</Button>
<!-- 底部状态栏 -->
<Button DockPanel.Dock="Bottom" Height="30">底部按钮</Button>
<!-- 左侧导航栏 -->
<Button DockPanel.Dock="Left" Width="100">左侧按钮</Button>
<!-- 右侧工具栏 -->
<Button DockPanel.Dock="Right" Width="100">右侧按钮</Button>
<!-- 中间内容区域(最后一个元素会自动填充剩余空间) -->
<Button>中间内容</Button>
</DockPanel>
</Window>
XML<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LastChildFill Demo" Height="300" Width="400">
<!-- 设置LastChildFill="False",最后一个子元素不会填充剩余空间 -->
<DockPanel LastChildFill="False">
<Button DockPanel.Dock="Top" Height="50">顶部区域</Button>
<Button DockPanel.Dock="Left" Width="100">左侧区域</Button>
<Button DockPanel.Dock="Right" Width="100">右侧区域</Button>
<Button DockPanel.Dock="Bottom">底部区域</Button>
</DockPanel>
</Window>
XML<Window x:Class="AppDockPanel.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:AppDockPanel"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<DockPanel>
<!-- 顶部菜单栏 -->
<Menu DockPanel.Dock="Top">
<MenuItem Header="文件">
<MenuItem Header="新建"/>
<MenuItem Header="打开"/>
<MenuItem Header="保存"/>
<Separator/>
<MenuItem Header="退出"/>
</MenuItem>
<MenuItem Header="编辑">
<MenuItem Header="复制"/>
<MenuItem Header="粘贴"/>
</MenuItem>
<MenuItem Header="帮助"/>
</Menu>
<!-- 顶部工具栏 -->
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<Button Content="新建" Padding="5,2"/>
<Button Content="打开" Padding="5,2"/>
<Button Content="保存" Padding="5,2"/>
<Separator/>
<Button Content="剪切" Padding="5,2"/>
<Button Content="复制" Padding="5,2"/>
<Button Content="粘贴" Padding="5,2"/>
</ToolBar>
</ToolBarTray>
<!-- 左侧导航面板 -->
<TreeView DockPanel.Dock="Left" Width="200">
<TreeViewItem Header="项目1">
<TreeViewItem Header="子项1"/>
<TreeViewItem Header="子项2"/>
</TreeViewItem>
<TreeViewItem Header="项目2"/>
<TreeViewItem Header="项目3"/>
</TreeView>
<!-- 底部状态栏 -->
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem>
<TextBlock Text="就绪"/>
</StatusBarItem>
<Separator/>
<StatusBarItem>
<TextBlock Text="项目数:3"/>
</StatusBarItem>
</StatusBar>
<!-- 主要内容区域 -->
<Grid Background="#FFF5F5F5">
<TextBlock Text="主要内容区域"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="20"/>
</Grid>
</DockPanel>
</Window>
C#using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace AppDockPanel
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
// 创建主DockPanel
DockPanel dockPanel = new DockPanel();
// 创建并添加顶部按钮
Button topButton = new Button
{
Content = "顶部按钮",
Height = 30
};
DockPanel.SetDock(topButton, Dock.Top);
dockPanel.Children.Add(topButton);
// 创建并添加底部按钮
Button bottomButton = new Button
{
Content = "底部按钮",
Height = 30
};
DockPanel.SetDock(bottomButton, Dock.Bottom);
dockPanel.Children.Add(bottomButton);
// 创建并添加左侧按钮
Button leftButton = new Button
{
Content = "左侧按钮",
Width = 100
};
DockPanel.SetDock(leftButton, Dock.Left);
dockPanel.Children.Add(leftButton);
// 创建并添加右侧按钮
Button rightButton = new Button
{
Content = "右侧按钮",
Width = 100
};
DockPanel.SetDock(rightButton, Dock.Right);
dockPanel.Children.Add(rightButton);
// 创建并添加中间内容
Button centerButton = new Button
{
Content = "中间内容"
};
dockPanel.Children.Add(centerButton);
// 设置窗口内容
this.Content = dockPanel;
}
}
}
DockPanel是WPF中一个非常实用的布局控件,特别适合用于创建具有固定布局结构的应用程序界面。它的使用方式直观,性能优良,是从WinForm迁移到WPF过程中一个很好的过渡选择。通过合理使用DockPanel,可以轻松实现类似于传统Windows应用程序的布局效果,同时还能享受到WPF带来的更多灵活性和功能性。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!