WPF笔记(2.5 Canvas)——Layout

Canvas是最精确的布局容器——绝对定位,此书作者不建议使用,以为控件的大小一般会随着内部字 体图片的动态生成而自动变化,所以使用前三种布局是最好的选择,在这一点上,我也持同样意见。

Canvas使用Top/Bottom属性控制距离顶部/底部的高度;使用Left/Right属性控制距离左/右的距离。 有趣的是,调整Form的大小,第二个TextBlock的位置会相应变化,但和底部以及右边的距离是不变的, 代码见下:

<Canvas Background="Yellow">
  <TextBlock Canvas.Left="10" Canvas.Top="20">Hello</TextBlock>
  <TextBlock Canvas.Right="10" Canvas.Bottom="20">world!</TextBlock>
</Canvas>

此外,Canvas不会自动裁减超过自身范围的内容,即多出的内容会显示在Canvas外面,那是因为默认 ClipToBounds="False";如果设置ClipToBounds="True",则会裁剪多于内容。

最后,联合使用ViewBox可以使自动布局控件调整大小(见下一节)。

时间: 2024-12-10 22:36:37

WPF笔记(2.5 Canvas)——Layout的相关文章

WPF笔记(2.6 ViewBox)——Layout

在Canvas外面包一层ViewBox,可以使Canvas内的控件填充整个ViewBox,并随着ViewBox的大小变化而 同步变化,这是因为ViewBox默认属性Stretch="Uniform". Stretch有四个属性: Uniform, Fill(为了填充甚至会拉伸), None(无效果,相当于没有用ViewBox), UniformToFill(如果Canvas大于ViewBox大小则裁剪) 老实说,这节我没看太懂,让我再try一下.

WPF笔记(2.2 DockPanel)——Layout

读完了这一节,发现DockPanel就是过去winform中的Dock属性.原来的Dock属性是子控件设置,而其 父亲级别不用设置.现在WPF改为在父亲级别抽象出一个DockPanel,然后设置其下子控件的Dock属性. <DockPanel LastChildFill="True"> <Button DockPanel.Dock="Left">Left</Button> <Button DockPanel.Dock=&qu

WPF笔记(2.4 Grid)——Layout

第一章已经简单介绍过这个容器,这一节详细介绍. Grid一般是用表格(Grid.Row 和Grid.Column )的,比StackPanel更细致一些,但是,这么玩很麻烦, 先横着竖着定义一大堆,然后把元素指定其表格位置,即插入数据,和我们平常习惯的HTML表格不太一样 ,甚至更麻烦了. 原因如下:Html空单元格要放占位符,这样会放很多:Grid玩法则是用什么元素就指定单元格位置, 不用的单元格默认是空,不用指定.另外,Grid单元格中的多个控件可以按照Z轴堆叠,这个顺序是由控 件在xaml

WPF笔记(2.3 StackPanel)——Layout

StackPanel用于小规模的排版布局,比如说一个局部下几个textbox和Button啦. Orientation属性有Vertical和Horizontal两种选择,决定布局方向. 所有控件都有Margin属性,用来使控件之间不那么拥挤,Margin随Vertical和Horizontal的不同而所 加的空白方向不同,当然Margin="3,3"意味着同时在两个方向上有空白. HorizontalAlignment属性用来调整控件的拓展方向.默认是Stretch,即横向有多少地方

WPF and Silverlight 学习笔记(九):WPF布局管理之Canvas、InkCanvas

一.Canvas 在WPF中子元素的绝对定位的布局控件 其子元素使 用Width.Height定义元素的宽度和高度 使用Convas.Left (Convas.Right).Convas.Top(Convas.Bottom)定义与Convas容器的相对位 置 如果同时存在Convas.Left和Convas.Right.Convas.Top和 Convas.Bottom,则Convas.Left.Convas.Top优先生效 例如: 1: <Canvas> 2: <Button Canv

WPF笔记(2.9和2.10)——Layout

2.9讲的是,如果内部设定超过容器大小,怎么办? StackPanel会裁剪越界部分 DockPanel和Grid会智能判断,从而决定换行. 2.10 自定义布局容器 自定义容器要实现两个方法MeasureOverride和ArrangeOverride,并保证遍历其下的所有子控件,使 他们都执行Measure和Arrange方法. using System; using System.Windows.Controls; using System.Windows; namespace Custo

WPF笔记(2.8 常用的布局属性)——Layout

这一节老没意思,啰里啰唆的尽是些HTML的属性,挑几个好玩的List出来,备忘: Padding与Margin的区别: Margin指控件边界与外界的间隙:Padding指的是控件内部内容与控件边界的间隙.两者可以同时使用 . 不再支持 RenderTransform= "scale 3" 改为: <Button> <Button.LayoutTransform> <ScaleTransform ScaleX="3" ScaleY=&q

WPF笔记(2.7 文字布局)——Layout

这一节介绍的是文字布局的几个控件: 1.TextBlock 最基本的文字控件 可以配置5个Font属性. TextWraping属性,"Wrap"是换行,NoWrap是不换行(原书有误,在此更正). TextBlock控件内可以放置很多控件,不光是文字. <TextBlock TextWraping="Wrap"> <Button>Split</Button> <CheckBox>across</CheckBox

WPF笔记(1.10 绘图)——Hello,WPF!

书中的代码语法过时了,改写为以下(测试通过): <Button> <Button.LayoutTransform> <ScaleTransform ScaleX="3" ScaleY="3" /> </Button.LayoutTransform> <StackPanel Orientation="Horizontal"> <Canvas Width="20"