核心布局面板
名称 | 描述 |
---|---|
StackPanel | 在水平或垂直的堆栈中放置元素。这个布局容器通常用于更大、更复杂窗口中的一些小区域 |
WrapPanel | 在一系列可换行的行中放置元素。在水平方向上, WrapPanel面板从左向右放置条目,然后在随后的行中放置元素。在垂直方向上, WrapPanel面板在自上而下的列中放置元素,并使用附加的列放置剩余的条目 |
DockPanel | 根据容器的整个边界调整元素 |
Grid | 根据不可见的表格在行和列中排列元素,这是最灵活、最常用的容器之一 |
UniformGrid | 在不可见但是强制所有单元格具有相同尺寸的表中放置元素,这个布局容器不常用 |
Canvas | 使用固定坐标绝对定位元素。这个布局容器与传统 Windows窗体应用程序最相似,但没有提供锚定或停靠功能。因此,对于尺寸可变的窗口,该布局容器不是合适的选择。如果选择的话,需要另外一些工作 |
<Grid>
<StackPanel>
<Label HorizontalAlignment="Center">A Button Stack</Label>
<Button HorizontalAlignment="Left">Left Button</Button>
<Button HorizontalAlignment="Right">Right Button</Button>
<Button>Right Button</Button>
</StackPanel>
</Grid>
执行结果:
<Grid>
<WrapPanel>
<Button Width="80" Height="30" >Button-01</Button>
<Button Width="80" Height="60" >Button-01</Button>
<Button Width="80" Height="30" >Button-01</Button>
<Button Width="80" Height="30" >Button-01</Button>
<Button Width="80" Height="30" >Button-01</Button>
</WrapPanel>
</Grid>
执行结果:
先设置的控件优先靠边
<Grid>
<DockPanel>
<Button DockPanel.Dock="Top">Top Button</Button>
<Button DockPanel.Dock="Bottom">Bottom Button</Button>
<Button DockPanel.Dock="Left">Left Button</Button>
<Button DockPanel.Dock="Right">Right Button</Button>
<Button>Remaining space</Button>
</DockPanel>
</Grid>
执行结果:
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Grid.Row="0">Button-01</Button>
<Button Grid.Column="1" Grid.Row="1">Button-02</Button>
</Grid>
执行结果:
<ColumnDefinition Width="100"/> <!-- 绝对尺寸 -->
<ColumnDefinition Width="Auto"/> <!-- 自动尺寸-->
<ColumnDefinition Width="80*"/> <!-- 比例尺寸(带*前面的数为比例系数)-->
<!-- 如果希望不均匀地分割剩余空间,可指定权重,权重必须放在星号之前。-->
<!-- 例如,如果有两行是按比例设置尺寸,并希望第一行的高度是第二行高度的一半,-->
<!-- 那么可以使用如下设置来分配剩余空间-->
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
Row和 Column附加属性在单元格中放置元素。还可以使用另外两个附加属性使元素跨越多个单元格,这两个附加属性是 Rowspan和 Columnspan。这两个属性使用元素将会占有的行数和列数进行设置。
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="39*"/>
<RowDefinition Height="40*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="84*"/>
<ColumnDefinition Width="92*"/>
<ColumnDefinition Width="82*"/>
<ColumnDefinition Width="67*"/>
<ColumnDefinition Width="95*"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Grid.Row="0">Button-01</Button>
<Button Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2" >Button-02</Button>
<Button Grid.Column="4" Grid.Row="0" Grid.RowSpan="2">Button-03</Button>
</Grid>
执行结果:
原则:
<Grid ShowGridLines="False">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Grid.Row="0" Margin="3" Content="Button-01"/>
<Button Grid.Column="0" Grid.Row="1" Margin="3" Content="Button-02"/>
<Button Grid.Column="2" Grid.Row="0" Margin="3" Content="Button-03"/>
<Button Grid.Column="2" Grid.Row="1" Margin="3" Content="Button-04"/>
<GridSplitter Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Width="3" VerticalAlignment="Stretch" HorizontalAlignment="Center" ShowsPreview="False"/>
</Grid>
执行结果:
有一种网格不遵循前面讨论的所有原则一 UniFormGrid面板。与Grid面板不同UniFormGrid面板不需要(甚至不支持)预先定义的列和行。相反,通过简单地设置Rows和Columns属性来设置其尺寸。每个单元格始终具有相同的大小,因为可用的空间被均分。最后,元素根据定义的顺序被放置到适当的单元格中。 Uniformgrid面板中没有Row和 Column附加属性,也没有空白单元格。
<Grid>
<UniformGrid Rows="2" Columns="2">
<Button >Button 01</Button>
<Button >Button 02</Button>
<Button >Button 03</Button>
<Button >Button 04</Button>
</UniformGrid>
</Grid>
执行结果:
Canvas面板允许使用精确的坐标放置元素,如果设计数据驱动的富窗体和标准对话框,这并非好的选择;但如果需要构建其他些不同的内容(例如,为图形工具创建绘图表面), Canvas面板可能是个有用的工具。 Canvas面板还是最轻量级的布局容器。这是因为 Canvas面板没有包含任何复杂的布局逻辑,用以改变其子元素的首选尺寸。 Canvas面板只是在指定的位置放置其子元素,并且其子元素具有所希望的精确尺寸为在 Canvas面板中定位元素,需要设置 Canvas.Left和 Canvas.Top附加属性。 Canvas.Left属性设置元素左边和 Canvas面板左边之间的单位数, Canvas,Top属性设置子元素顶边和Canvas面板顶边之间的单位数
ItemDecoration 是 RecyclerView 的一个抽象静态内部类,负责装饰 Item 视图,例如添加间距、高亮或者分组边界等。
Linux /etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件。linux /etc/group文件是有关于系统管理员对用户和用户组管理的文件,linux用户组的所有信息都存放在/etc/group文件中。具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有 /etc/group和/e
从头开始编写操作系统(8) 第7章:系统结构 2011年04月17日 译自:http://www.brokenthorn.com/Resources/OSDev7.html 第7 章:系统结构 by Mike, 2008 本系列文章旨在向您展示并说明如何从头开发一个操作系统。 欢迎!在之前的一章里,我们总算完成了引导加载器的工作!到目前为止: 我们详细的了解了...
Java读取配置文件,xxx.class.getClassLoader().getResourceAsStream("");和xxx.class.getResourceAsStream("");的区别一、需求说明: 有时候我们做项目,会遇到一个问题,就是我们在开发时候代码里面有很多路径到了部署的时候这些路径全部都要修改,有时候路径一多,自己难免也会忘记,本来代码就写了半天,结果到了部署的时候...
com.android.cts.devicepolicy.ManagedProfileTest – testAppLinksjunit.framework.AssertionFailedError at junit.framework.Assert.fail(Assert.java:48)10-11 11:56:14 I/BaseDevicePolicyTest: Test com.androi
问题描述:现在有已有的WCF服务,但是ajax是不能请求到这个服务的;需要把WCF转成WCF REST 的风格。以下是从WCF转 WCF REST的步骤1.首先在接口定义的地方加上 请求WebInvoke http的请求动作如下:[OperationContract][WebInvoke(Method = "POST", UriTemplate = "Login", ResponseFormat ...
DataInputStream是java IO装饰模式的一种实现,设计的目的是读取基本的java数据类型,需要强调的是DataInputStream也不是线程安全的,它继承了FilterInputStream抽象类,同时实现了DataInput接口,这个接口的主要作用是读取字节类型的数据并将数据重新构造为java的基本类型.对于DataInput接口如果在读取所需字节数据之前已经达到末尾,则会抛出...
在这行代码加上style隐藏掉, c.innerHTML = ''; 加个 var isload = y.isload;属性判断是否显示, js实现: function OpenPDF(fileurl) { var myPDF = new PDFObject({ url: fileurl,isload:false }).embed(); }
即时因子计算服务、大数据批计算服务、历史因子查询服务...尽在此因子计算平台~
自动引用计数1.1 什么是自动引用计数 ARC和MRC的区别: MRC:(Manual Reference Counting)也就是非ARC,在Xcode4之前,Object_C的内存管理就需要开发人员手动维护。 ARC:(Automatic Reference Counting)也就是ARC,翻译成中文就是:【自动引用计数】,不需要开发人员手动维护,系统会在合适...
无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。 在使用sqlite数据库的时候遇到的,这里做个总结; 在项目里添加 现有项 把SQLite.Interop.DLL文件添加进来,然后点击属性 修改一...
1.只有寄存器类型变量才能在initial内部被赋值。 2.verilog系统任务 (1):finish/finish/finish/stop finish:如果遇到finish:如果遇到finish:如果遇到finish,仿真器完成仿真并退出。 stop:当遇到stop:当遇到stop:当遇到stop,仿真器停止仿真,但不退出,同时提供一个命令提示符,在命令提...