WPF笔记(2.4 Grid)——Layout

第一章已经简单介绍过这个容器,这一节详细介绍。

Grid一般是用表格(Grid.Row 和Grid.Column )的,比StackPanel更细致一些,但是,这么玩很麻烦, 先横着竖着定义一大堆,然后把元素指定其表格位置,即插入数据,和我们平常习惯的HTML表格不太一样 ,甚至更麻烦了。

原因如下:Html空单元格要放占位符,这样会放很多;Grid玩法则是用什么元素就指定单元格位置, 不用的单元格默认是空,不用指定。另外,Grid单元格中的多个控件可以按照Z轴堆叠,这个顺序是由控 件在xaml上的出现顺序决定的。

Grid列宽的定义:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="50" />
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="2*" />
    <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

第一种,固定长度——宽度不够,会裁剪,不好用。单位pixel。

第二种,自动长度——自动匹配列中最长元素的宽度。

第三种,比例长度——*表示占用剩余的全部宽度;两行都是*,将平分剩余宽度;像上面的一个2*, 一个*,表示前者2/3宽度。

单元格合并,1.4已经介绍过,这里强调一点,虽然一个控件A跨越2个单元格,但是并未改变原来Grid 的所有单元格,也就是说,这是两个对象Grid和控件A,互相不影响。那么,另一个控件B仍然可以使用这 两个单元格中的一个,最后根据A与B的先后出现顺序会有重叠效果。这是不同于html单元格合并概念的。 这段话是我自己想的,多精辟啊,一针见血。终于对xaml有点感觉了。

接下来讲的是多个Grid共享宽度组的技术。smaple讲的是把grid放入ScrollViewer中,但是一旦滚动 ScollBar,grid的Title会跟着一起滚动,为了做到滚动时Title定住不动,要做两个Grid:一个放Title ;另一个放主体,并嵌套进ScrollViewer中。这样滚动问题解决了,另一个问题又出现了,就是两个Grid 的字段对不齐,于是要使用shared-size组。

<DockPanel Grid.IsSharedSizeScope="True">
        <Grid DockPanel.Dock="Top">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" SharedSizeGroup="Location" />
                <ColumnDefinition Width="Auto" SharedSizeGroup="Rank" />
                <ColumnDefinition Width="Auto" />

//省略若干行代 码

            <Border Grid.Column="0" Grid.Row="0" BorderThickness="1"
                    Background="LightGray" BorderBrush="Gray">
                <TextBlock>Title</TextBlock>
            </Border>
            <Border Grid.Column="1" Grid.Row="0" BorderThickness="1"
                    Background="LightGray" BorderBrush="Gray">
                <TextBlock>Location</TextBlock>
            </Border>
            <Border Grid.Column="2" Grid.Row="0" BorderThickness="1"
                    Grid.ColumnSpan="2"
                    Background="LightGray" BorderBrush="Gray">
                <TextBlock>Rank</TextBlock>
            </Border>

            <FrameworkElement Grid.Column="3"
               Width="{DynamicResource {x:Static SystemParameters.ScrollWidthKey}}" />

        </Grid>

         <ScrollViewer>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Location" />
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Rank" />
                </Grid.ColumnDefinitions>

//省略若干行代码

            </Grid>
        </ScrollViewer>
</DockPanel>

时间: 2024-09-07 10:22:57

WPF笔记(2.4 Grid)——Layout的相关文章

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.6 ViewBox)——Layout

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

WPF笔记(2.5 Canvas)——Layout

Canvas是最精确的布局容器--绝对定位,此书作者不建议使用,以为控件的大小一般会随着内部字 体图片的动态生成而自动变化,所以使用前三种布局是最好的选择,在这一点上,我也持同样意见. Canvas使用Top/Bottom属性控制距离顶部/底部的高度:使用Left/Right属性控制距离左/右的距离. 有趣的是,调整Form的大小,第二个TextBlock的位置会相应变化,但和底部以及右边的距离是不变的, 代码见下: <Canvas Background="Yellow">

WPF笔记(2.3 StackPanel)——Layout

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

wpf 坐标+-WPF 在Canvas 或grid中以鼠标弹出一个以鼠标中心点位置的UserControl

问题描述 WPF 在Canvas 或grid中以鼠标弹出一个以鼠标中心点位置的UserControl 具体我做了一个圆形的菜单 的UserControl 在点击窗体时 在主窗体通过鼠标点击弹出 弹出的窗体以鼠标中心点为中心! 解决方案 好吧 我自己解决了 为什么 我每一次问完问题 都会自己搞定...

qt-QT做计算器时,把pushButton拖到Grid Layout上

问题描述 QT做计算器时,把pushButton拖到Grid Layout上 怎么控制0那个按钮占两列,但是0上面的数字只占一列 解决方案 不要拖,用代码实现啊. 解决方案二: 这应该是布局的问题,你查看一下自己的布局使用情况,设置成相对布局或者绝对布局的话效果是不一样的.或者你可以直接在代码中进行自定义的设置.这样界面会更加的精确.希望对你有用

CSS List Grid Layout 图片垂直居中_经验交流

CSS List Grid Layout Compatible and tested with IE6, IE7, Safari 2, Safari 3, Firefox 2, Opera 9.21 List Grid View sodales porta libero.n sodales porterat. Nunc eu risus ut dolor bibendum adipiscing. Proin sodales porta libero. Integerdum adipiscing.

WPF and Silverlight学习笔记(八):WPF布局管理之Grid、UniformGrid

一.Grid Grid是以表格形式组织控件的一种布局方式,与Java AWT中 的GridLayout类似,但区别在于 WPF中的Grid的每一个单元格中可以放置 多个控件,但控件可能会层叠在一起 WPF中的Grid支持单元格的合并,类 似于HTML中的table td中的rowspan和colspan Grid中的行和列可以自定 义高度(Height)和宽度(Width) 在设置高度和宽度时可以采用两种写 法: 1)Height="60":不加"星号"表示固定 的

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