学海无涯

导航

Layout 布局

 WPF  附带以下通用面板布局控件:

Grid(网格)

按开发人员指定的行和列排列内容,不用固定大小和位置。最强大的内置布局控件
 1  <Grid>
 2             <Grid.RowDefinitions>
 3                 <RowDefinition />
 4                 <RowDefinition />
 5                 <RowDefinition />
 6             </Grid.RowDefinitions>
 7             <Grid.ColumnDefinitions>
 8                 <ColumnDefinition />
 9                 <ColumnDefinition />
10                 <ColumnDefinition />
11             </Grid.ColumnDefinitions>
12             <Button Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">A</Button>
13             <Button Grid.Row="0" Grid.Column="2">C</Button>
14             <Button Grid.Row="1" Grid.Column="0" Grid.RowSpan="2">D</Button>
15             <Button Grid.Row="1" Grid.Column="1">E</Button>
16             <Button Grid.Row="1" Grid.Column="2">F</Button>
17             <Button Grid.Row="2" Grid.Column="1">H</Button>
18             <Button Grid.Row="2" Grid.Column="2">I</Button>
19         </Grid>
Grid

 

列宽和行高您可以使用ColumnDefinition和
RowDefinition元素配置Grid中的列宽和行高。
共有三种调整大小选项:固定、自动和比例。
固定:设置固定数字
自动:Auto,根据内容自动高速大小
比例:*,2.5*

UniformGrid(自动均分行或列的网格)

在每个单元格大小相同的网格中排列子项。

根据显示内容的需要生成相同行数和列数的网格来排列内容

StackPanel (堆栈面板)

将子控件横向排列或纵向排列,用于管理小规模局部布局
根据面板的 Orientation="Horizontal" 属性,决定方向是从上到下或从左到右排列内容(默认是:从上到下)

WrapPanel(换行面板)

控件布局方式同 StackPanel ,但在子控件空间不足时会自动换行排列控件。

在水平行中排列事物,直到下一个项目排不下,在这种情况下它换行到下一行。(根据窗口大小自动换行排列控件)

DockPanel(容器停靠面板)

将面板区域的整个边缘分配给每个子控件,用于简单的界面的粗略布局

根据每个内容“停靠”到的边缘排列内容,最后一个控件除外,它填充剩余区域(仅当属性:LastChildFill="True")

DockPanel非常适合创建基本用户界面的顶层结构

Canvas(画布)

按位置和坐标排列内容,调整画布大小时不会自动重新排列。类似于WinForm窗口
不执行任何布局逻辑,将子控件放在你指定的位置,允许你完全控制布局过程。
默认情况下,面板没有自己的外观,它们存在唯一可见效果是它们如何高速子控件的大小和位置。但是,可以通过设置它们的背景 Background 属性使它们可见。

ScrollViewer 滚动查看器

ScrollViewer控件允许通过将超大内容放入可滚动区域来显示超大内容。
如果你想将多个元素放入一个可滚动的视图中,你可以将它们嵌套在一个面板中
 
<ScrollViewer HorizontalScrollBarVisibility="Auto">
        <Ellipse Fill="Green" Height="1000" Width="2000" />
    </ScrollViewer>

 

如果您有一个包含大量项目的大型可滚动区域,那么预先创建所有项目可能效率不高。您可以
通过仅在项目滚动到视图中时按需创建项目来显着提高性能。
如果您想控制滚动功能,您必须编写一个实现IScrollInfo  的用户界面元素。
  IScrollInfo有  24  个成员,并且需要您完成ScrollViewer本来
可以为您完成的大部分工作。
*幸运的是,对于滚动列表的非常常见的场景,我们可以使用  
VirtualizingStackPanel  提供的内置IScrollInfo实现。
VirtualizingStackPanel实现IScrollInfo以便它可以显示所有数据的滚动反馈,即使它只生成  UI  
元素来表示当前可见的那些项目,“虚拟化”数据视图

Viewbox 视图框

Viewbox元素会自动缩放其内容以填充可用空间。

 

 

 1  <Viewbox Stretch="Uniform">
 2     <Canvas Width="18" Height="18" VerticalAlignment="Center">
 3         <Ellipse Canvas.Left="1" Canvas.Top="1" Width="16" Height="16"
 4  Fill="Yellow" Stroke="Black" />
 5         <Ellipse Canvas.Left="4.5" Canvas.Top="5" Width="2.5" Height="3"
 6  Fill="Black" />
 7             <Ellipse Canvas.Left="5.2" Canvas.Top="5.8" Width="1" Height="1"
 8  Fill="White" />
 9             <Ellipse Canvas.Left="11" Canvas.Top="5" Width="2.5" Height="3"
10  Fill="Black" />
11         <Path Data="M 5,10 A 3,3 90 0 0 13,10" Stroke="red" />
12     </Canvas>
13     </Viewbox>

 

 

Common Layout Properties  通用布局属性

Property(属性)
Usage(说明)
Width
指定固定宽度
Height
指定固定高度
MinWidth
最小允许宽度
MaxWidth
最大允许宽度
MinHeight
最小允许高度
MaxHeight
最大允许高度 
HorizontalAlignment
水平对齐
VerticalAlignment
垂直对齐 
Margin
元素外部的边距
Padding
元素内部的边距
Visibility
元素的可见性
FlowDirection
文字方向 
Panel.ZIndex 
针对叠列元素显示的顺序(Grid 和 Canvas ,中同一位置可以叠积放置多个元素,类似于PS中画布分层)
RenderTransform 
渲染变换(不会重新布局,超出部分截除)
LayoutTransform
布局变换(会跟据变换内容大小,重新调整父控件大小)
 

posted on 2023-01-04 17:35  宁静致远.  阅读(89)  评论(0编辑  收藏  举报