博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无废话WPF系列7:WPF布局控件
阅读量:6152 次
发布时间:2019-06-21

本文共 2574 字,大约阅读时间需要 8 分钟。

一、 Grid

a. 单元格的宽度可以设置三类值

绝对值:double数值加单位后缀

比例值:double数值加一个星号*

自动值:  auto,高度将有内部的控件的高度和宽度决定。

b. Grid可接受的宽度和高度的单位

1in=96px

1cm=(96/2.54)px

1pt=(96/72) px

c. 示例

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
<Window x:Class=
"DeepXAML.MainWindow"
        
xmlns=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        
xmlns:x=
"http://schemas.microsoft.com/winfx/2006/xaml"
        
xmlns:local=
"clr-namespace:DeepXAML"      
        
Title=
"MainWindow" 
Height=
"250" 
Width=
"450"
>
    
<Window.Resources>
      
<Style TargetType=
"Button"
>
            
<Setter Property=
"Margin" 
Value=
"5"
></Setter>
        
</Style>
    
</Window.Resources>   
    
<Grid ShowGridLines=
"True" 
>
        
<Grid.RowDefinitions>
            
<RowDefinition Height=
"50"
></RowDefinition>
            
<RowDefinition Height=
"20"
></RowDefinition>
            
<RowDefinition Height=
"2*"
></RowDefinition>
            
<RowDefinition Height=
"*"
></RowDefinition>
            
<RowDefinition></RowDefinition>           
        
</Grid.RowDefinitions>
        
<Button Grid.Row=
"0"
>50</Button>
        
<Button Grid.Row=
"1"
>20</Button>
        
<Button Grid.Row=
"2"
>2*</Button>
        
<Button Grid.Row=
"3"
>*</Button>
        
<Button Grid.Row=
"4"
></Button>
    
</Grid>
</Window>

 

如果没有设置height,实际上这个height默认被设置为1*, 这里说一下星号(*),解析器会把左右比例值加起来作为分母,把每个比例值做为分子,乘以未被占用的像素数,这样就算出每一个具体的值。

我们假设总高为200,那么上面的2*=(2/(2+1+1))*(200-70)=(1/2)*130=65

另外可以像HTML表格一样使用RowSpan和ColumnSpan

2. StackPanel

控件从左向右或者从上向下排列控件,有一个Orientation枚举,还可以使用HorizontalAlignment和VerticalAlignment来进行对齐。

3. Canvas

使用横纵坐标绝对点定位,很好理解,使用Canvas.Left, Canvas.Top来定位

4. DockPanel

DockPanel使用Dock属性来定位,DockPanel.Dock枚举可取值Left, Top, Right, Bottom四个值,下一个元素会使用剩下方向的全部空间,所以控件摆放顺序会影响布局。Dock布局的一个好处是缩放不会改变相对位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<Window x:Class=
"DeepXAML.MainWindow"
        
xmlns=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        
xmlns:x=
"http://schemas.microsoft.com/winfx/2006/xaml"
        
xmlns:local=
"clr-namespace:DeepXAML"      
        
Title=
"MainWindow" 
Height=
"250" 
Width=
"450"
>
    
<Window.Resources>
      
<Style TargetType=
"Button"
>
            
<Setter Property=
"Margin" 
Value=
"5"
></Setter>
        
</Style>
    
</Window.Resources>   
    
<Grid ShowGridLines=
"True" 
>
        
<DockPanel >
            
<Button DockPanel.Dock=
"Top"
>Top</Button>
            
<Button DockPanel.Dock=
"Left" 
Background=
"Yellow"
>Left</Button>
            
<Button DockPanel.Dock=
"Left" 
Background=
"LemonChiffon"
>Left</Button>
            
<Button DockPanel.Dock=
"Top"
>Top</Button>
            
<Button DockPanel.Dock=
"Right"
>Right</Button>
            
<Button DockPanel.Dock=
"Left"
>Left</Button>
            
<Rectangle Fill=
"Crimson"
></Rectangle>
        
</DockPanel>
    
</Grid>
</Window>

 

5. WrapPanel

这个和StatckPanel类似,就是排不下的控件会新起一行或者一列。

本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2011/02/19/1958582.html如需转载请自行联系原作者

王德水

你可能感兴趣的文章
Spring Boot Maven 打包可执行Jar文件!
查看>>
c#中lock的使用(用于预约超出限额的流程)
查看>>
ODI基于源表时间戳字段获取增量数据
查看>>
012-Go ORM框架之Gorm测试
查看>>
Cocos Creator 获取当前URL取参数
查看>>
Entity Framework的优势和缺点
查看>>
easyui confirm提示框 调整显示位置
查看>>
『TensorFlow』分布式训练_其一_逻辑梳理
查看>>
leetcode 342. Power of Four
查看>>
Sqlite在.NET下的使用和Sqlite数据库清理
查看>>
string format 格式化小数位
查看>>
Windows下使用mklink命令参数介绍
查看>>
使用JavaScript和D3.js实现数据可视化
查看>>
作为JavaScript开发人员,这些必备的VS Code插件你都用过吗?
查看>>
BZOJ5335 : [TJOI2018]智力竞赛
查看>>
springMVC中前台ajax传json数据后台controller接受对象为null
查看>>
Python DB API 连接数据库
查看>>
JavaScript 区分中英文字符的两种方法: 正则和charCodeAt()方法
查看>>
flywaydb and sql server
查看>>
SharePoint 2013 workflows stop working (Failed on started.)
查看>>