WPF中5种内建面板Canvas、StackPanel、WrapPanel、DockPanel、Grid分析

article/2025/10/25 7:02:17

https://blog.csdn.net/weixin_43437202/article/details/88292620
Canvas、StackPanel、WrapPanel、DockPanel和Grid是WPF中主要的5种内建面板,这些面板类都位于System.Windows.Controls命名空间下。

主要布局特点简述

  • Grid 按行列排列内容,如果没有特别说明行列则内容充满容器,多个内容则重叠充满内容
  • StackPanel 水平或垂直的放置内容元素
  • WrapPanel 自动换行的方式放置内容元素
  • DockPanel 按照Top、left、right等方式布局内容元素,最后一个元素充满可利用的容器空间
  • Canvas 在内容元素中设置附加属性Top、Left,根据Top、Left布局内容元素

WPF内建面板之——Grid
Grid是最通用的面板,它可以让你在一个多行、多列的表中排列子元素,而不依靠包装,提供了许多特性来有效地可能告知行和列。 用Grid实现类似于Visual Studio的启动界面:<Grid Background=“LightBlue”
要使用Grid,首先要向RowDefinitions和ColumnDefinitions属性中添加一定数量的RowDefinitions和ColumnDefinitions元素,从而定义行数和列数。可以在Grid中使用Row和Column附加属性定位子元素,它们都是以0为基准的整型值。如果没有显式设置任何行或列,Grid将会隐式地加入一个单元格。而如果没有在子元素上显式地设置Grid.Row或者Grid.Column,它们的值将为0. Grid的单元格可以是空的,一个单元格中可以有多个元素,而在单元格中元素是根据它们的Z顺序一个接着一个呈现的。
与Canvas一样,同一个单元格中的子元素不会与其他元素交互布局,信息——它们仅仅是重叠而已。可以使用Grid的两个附加属性来解决这个问题,它们是RowSpan和ColumnSpan。属性默认设置为1,且可以被设置为任何比1大的数字,这样可以让元素跨多行或多列。 通过设置某个RowDefinition的Height和某个ColumnDefinition的Width为字符串Auto(区分大小写),就可以实现自动尺寸监控。
Grid的特点
Grid的便利之处在于:
1)Grid本身并不占用任何空间,可以看作是用单元格对父控件空间的划分;
2)各个行定义的高度(或列定义的宽度)可以是成比例的(/n)、按需的(Auto)、固定的,自动响应父控件的Resize;
3)可以合并单元格(Grid.RowSpan / Grid.ColumnSpan)但是,如果整个页面的布局都用Grid的话,可读性会降低。

<Grid Width="200" Height="100" >
<!--定义了两列-->
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="100*"/>
</Grid.ColumnDefinitions>

<!–定义了四行–>
<Grid.RowDefinitions>
<RowDefinition Height=“25”/>
<RowDefinition Height=“25”/>
<RowDefinition Height=“25”/>
<RowDefinition Height=“25”/>
</Grid.RowDefinitions>

<TextBlock Grid.Row=“0” Grid.Column=“0” TextAlignment=“Right” Text=“用户名:” Name=“UserName”/>
<!–第一行第一列–>

<TextBlock Grid.Row=“1” Grid.Column=“0” TextAlignment=“Right” Text=“密码:” Name=“pass”/>
<TextBlock Grid.Row=“2” Grid.Column=“0” TextAlignment=“Right” Text=“确认密码:” Name=“repass”/>
<Button Grid.Row=“3” Grid.ColumnSpan=“2” Height=“23” Width=“100” Content=“确认” Click=“Button_Click” Name=“btn”/>
<!–Grid.ColumnSpan=“2”:合并单元格–>
<TextBox Name=“TxtBoxName” Grid.Row=“0” Grid.Column=“1” Text="" />
<!–第一行第二列–>
<PasswordBox Name=“pass1” Grid.Row=“1” Grid.Column=“1”/>
<!–密码框–>
<PasswordBox Name=“pass2” Grid.Row=“2” Grid.Column=“1” />
</Grid>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

WPF内建面板之——DockPanel
DockPanel支持让元素简单地停靠在整个面板的某一条边上,然后拉伸元素以填满全部宽度或高度。它也支持让一个元素填充其他已停靠元素没有占用的剩余空间。

DockPanel的特点
DockPanel利用在子控件中设定DockPanel.Dock=“Left”/“Top”/“Right”/"Bottom"来指定该子控件的泊靠位置,其布局效果与子控件书写顺序是相关的。例如,三个子控件的书写顺序是1)-DockPanel.Dock=“Left”,2)-DockPanel.Dock=“Right” 3),布局效果是从左到右1、3、2,1泊靠在左边,3泊靠在右边,而2在中间填满。DockPanel有一个叫做的LastChildFill属性,默认值为真,在该情况下,左右一个书写的子控件的DockPanel.Dock设定是无效的,自动人为是DockPanel.Dock=“Fill”。

 <DockPanel >2:     <Button Content="ButtonA" Width="70" DockPanel.Dock="Top" />3:     <Button Content="ButtonB" Width="70" HorizontalAlignment="Right" DockPanel.Dock="Top" />4:     <Button Content="ButtonC" Margin="10" DockPanel.Dock="Top" />5:     <Button Content="ButtonD" DockPanel.Dock="Left" />6:     <Button Content="ButtonE" DockPanel.Dock="Right" />7:     <Button Content="ButtonF" DockPanel.Dock="Bottom" />8:     <Button Content="ButtonG" />9: </DockPanel>
DockPanel
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述

WPF内建面板之——WrapPanel
WrapPanel与StackPanel类似,但是除了会对子元素作栈处理外,当没有足够空间来放一个栈时,它还会把子元素封装在行和列中。这对于显示Item的过渡数目十分有用,会产生一个比普通列表更加有趣的布局,很像Windows资源管理器。与StackPanel医院,WrapPanel没有附加属性来控制元素的位置。它定义了3个控制其行为的属性: Orientation——这就像StackPanel中的Ori。
WrapPanel是一个非常简单的面板,
从左至右按顺序位置定位子元素,如果排满断开至下一行。
后续排序按照从上至下或从右至左的顺序进行。
WrapPanel面板也提供了Orientation属性设置排列方式,这跟StatickPanel基本相似。不同的是WrapPanel会根据内容自动换行。

<Window x:Class="WpfTutorialSamples.Panels.WrapPanel"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="WrapPanel" Height="300" Width="300"><WrapPanel><Button>Test button 1</Button><Button>Test button 2</Button><Button>Test button 3</Button><Button Height="40">Test button 4</Button><Button>Test button 5</Button><Button>Test button 6</Button></WrapPanel>
</Window>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

WPF内建面板之——StackPanel
StackPanel是一个受欢迎的面板,因为它方便好用,它会顺序对它的子元素进行排列。它是少数几个没有定义任何附加属性的面板之一。由于没有附加属性来排列子元素
StackPanel的功能最简单,只支持将子控件按书写顺序竖排(Orientation=“Vertical” 默认)或者横排(Orientation=“Horizontal”)。

<Window x:Class="WPF.LayoutContainer.Controls.StackPanelLayoutWindow"  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  Title="StackPanelLayoutWindow" Height="300" Width="300" Background="LightCyan" >  <StackPanel Margin="10" Background="Yellow">  <StackPanel Margin="5" Background="Pink" Orientation="Horizontal">  <TextBlock Text="text1" Background="White" Margin="5"/>  <TextBlock Text="text2" Background="LightGray" Margin="5"/>  </StackPanel>  <StackPanel Margin="5" Background="Pink" >  <TextBlock Text="text3" Background="White" Margin="5"/>  <TextBlock Text="text4" Background="LightGray" Margin="5"/>  </StackPanel>  </StackPanel>  
</Window>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

WPF中的5种内建面板之一——Canvas
Canvas是最基本的面板,它仅支持用显式坐标定位元素,它也允许指定相对任何角的坐标,而不仅仅是左上角。可以使用Left、Top、Right、Bottom附加属性在Canvas中定位元素。通过设置Left和Right属性的值表示元素最靠近的那条边,应该与Canvas左边缘或右边缘保持一个固定的距离,设置Top和Bottom的值也是类似的意思。实质上,你在选择每个元素停靠的角时,附加属性的值是作为外边距使用的.

    <Canvas><Button Canvas.Left="152" Canvas.Top="209" Content="Button" Height="23" Name="button1" Width="75" /></Canvas>

http://chatgpt.dhexx.cn/article/6icUNQot.shtml

相关文章

WPF 改进 WrapPanel 右侧填充

WPF 改进 WrapPanel 右侧填充 本文经原作者授权以原创方式二次分享&#xff0c;欢迎转载、分享。 WPF 改进 WrapPanel 右边缘填充 作者&#xff1a;陈-林-赵-魏|驚鏵 原文链接[1]&#xff1a;https://www.cnblogs.com/wandia/p/17084881.html 目的&#xff1a;改进下WrapPanel,…

WrapPanel 实现虚拟化

WrapPanel 实现虚拟化 控件名&#xff1a;VirtualizingWrapPanel 作者&#xff1a;WPFDevelopersOrg 原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers 框架使用大于等于.NET40&#xff1b;Visual Studio 2022;项目使用 MIT 开源许可协议&#xff1…

对wpf 的入门记录总结----面板控件Canvas、WrapPanel、StackPanel、DockPanel

面板是WPF裡其中一個很重要的控件。 面板扮演著裝載其他控件的容器的角色&#xff0c;同時也控制著頁面和視窗的佈局。 由於一個視窗只允許一個子控件&#xff0c;因此面板經常會被使用於分隔空間&#xff0c;這樣每個空間就會有一個控件或者面板。 wpf支持6种面板&#xff1…

listbox 表头自动换行_WPF让ListView或ListBox中的WrapPanel 自动换行

原文:WPF让ListView或ListBox中的WrapPanel 自动换行 在ListView或者ListBox中使用WrapPanel想让ItemTemplate中的内容像下图这样先横向平铺然后再纵向换行&#xff0c;默认设置是不能实现的。 图1. 横向平铺再纵向换行的效果示例 请注意最关键的在上面代码中第一行的“ScrollV…

WPF教程三:布局之WrapPanel面板(转 )

WPF教程三&#xff1a;布局之WrapPanel面板 WrapPanel&#xff1a;环绕面板 WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列&#xff0c;当长度或高度不够时就会自动调整进行换行&#xff0c;后续排序按照从上至下或从右至左的顺序进行。 Orientation——根据内容自…

WPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel

WPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel 回顾 上一篇&#xff0c;我们介绍了基本控件及控件的重要属性和用法&#xff0c;我们本篇详细介绍WPF中的几种布局容器及每种布局容器的使用场景&#xff0c;当 然这些都是本人在实际项目中的使用经验&#xff0c;可能…

2021-08-16 WPF控件专题 WrapPanel 控件详解

1.WrapPanel 控件介绍 流面板 子元素按顺序排列&#xff0c;如果按水平方向:从左到右&#xff0c;超出部分&#xff0c;自动换行到下一行 垂直 从上到下&#xff0c; 下一列 排列方向&#xff1a;Orientation ItemWidth ItemHeight 调整面板的尺寸时&#xff0c;内部子元素的…

.NET WPF(3)布局之WrapPanel面板

一.WPF&#xff08;3&#xff09;布局之WrapPane面板 1. WrapPanel&#xff1a;环绕面板 WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列&#xff0c;当长度或高度不够时就会自动调整进行换行&#xff0c;后续排序按照从上至下或从右至左的顺序进行。 Orie…

WPF编程基础入门 ——— 第三章 布局(五)布局面板WrapPanel

WPF布局——布局面板WrapPanel WPF——WrapPanel布局控件WrapPanel实例——十个按钮 WPF——WrapPanel布局控件 WrapPanel(自动折行面板)&#xff0c;允许任意多的子元素按照声明的先后顺序&#xff0c;从左往右摆放&#xff0c;摆满一行后&#xff0c;自动折行。折行面板的经…

WPF布局控件之WrapPanel

WrapPanel WrapPanel&#xff0c;英文意思是折叠容器&#xff0c;那到底是怎么个折叠法呢&#xff1f;如下&#xff1a; <Window x:Class"LearnLayout.WrapPanelWin"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"ht…

.NET WPF教程(7)——布局介绍WrapPanel与StackPanel(②)

三. WrapPanel WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列&#xff0c;当长度或高度不够是就会自动调整进行换行&#xff0c;后续排序按照从上至下或从右至左的顺序进行。 Orientation——根据内容自动换行。当 Horizontal选项看上去类似于Windows资源管理器…

WPF 用代码实现WrapPanel右侧自动对齐(解决多余空白问题)

未处理前效果&#xff1a; 处理后效果&#xff1a; <Border Background"{StaticResource BorderBg}" BorderThickness"2" BorderBrush"{StaticResource BorderBrush}" CornerRadius"5" Padding"5" x:Name"SvK…

C# Grid StackPanel DockPanel WrapPanel

WPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel 回顾 上一篇&#xff0c;我们介绍了基本控件及控件的重要属性和用法&#xff0c;我们本篇详细介绍WPF中的几种布局容器及每种布局容器的使用场景&#xff0c;当 然这些都是本人在实际项目中的使用经验&#xff0c;可能…

WPF基础五:UI①布局元素WrapPanel

目录 WrapPanel WrapPanel类 XAML范例&#xff1a; C#代码 WrapPanel 按从左到右的顺序位置定位子元素&#xff0c;在包含框的边缘处将内容切换到下一行。 后续排序按照从上至下或从右至左的顺序进行&#xff0c;具体取决于 Orientation 属性的值。 WrapPanel包含UIElemen…

一个优化奇怪的 WrapPanel

一个优化奇怪的 WrapPanel 本文经原作者授权以原创方式二次分享&#xff0c;欢迎转载、分享。 一个优化奇怪的 WrapPanel 作者&#xff1a;陈-林-赵-魏 原文链接[1]&#xff1a;https://www.cnblogs.com/wandia/p/17092221.html FixToRB 附加属性&#xff0c;固定到【右边(水平…

WPF布局之WrapPanel与StackPanel

转载&#xff1a;https://www.cnblogs.com/Im-Victor/p/10565030.html 三. WrapPanel WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列&#xff0c;当长度或高度不够是就会自动调整进行换行&#xff0c;后续排序按照从上至下或从右至左的顺序进行。 Orientation——…

WrapPanel在不同页面渲染使用

WrapPanel渲染的使用 WrapPanel在UserControl用户控件的使用 页面控件的是渲染出来&#xff0c;在UserControl用户控件的使用无法直接使用&#xff0c;使用会出现空&#xff0c;没法渲染获取到WrapPanel控件。 没法渲染获取效果图&#xff1a; 想成功获取渲染获取到WrapPane…

WPF 入门教程WrapPanel介绍

WrapPanel将定位每个子控件的旁边&#xff0c;另外&#xff0c;水平方向&#xff08;默认值&#xff09;或垂直&#xff0c;直到没有更多的空间&#xff0c;在那里将换到下一行&#xff0c;然后继续。当您想要一个垂直或水平列表控件在没有更多空间时自动换行时使用它。 当 Wr…

WPF WrapPanel、UniformGrid、DockPanel介绍

WPF WrapPanel、UniformGrid、DockPanel介绍 WrapPanel WrapPanel , 具有在有限的容器范围内, 可以自动换行, 或者换列处理。具体则取决于WrapPanel的排列方式 (Orientation)。 Orientation"Horizontal"时各控件从左至右罗列&#xff0c;当面板长度不够时&#xff…

WPF控件之WrapPanel的用法

简单来说&#xff0c;WrapPanel就是一个可以行填充&#xff0c;自动换行。或者列填充&#xff0c;自动换列的一个布局容器。 如下所示&#xff0c;它会自动将10个button分成2行 <WrapPanel><Button Content"button1" /><Button Content"button…