美文网首页
【译】Fuse入门(八)

【译】Fuse入门(八)

作者: 赵赵811 | 来源:发表于2015-12-27 20:51 被阅读0次

    Layout布局上部分

    官网原文:https://www.fusetools.com/learn/fuse#layout

    布局 Layout

    Fuse有一个强大的布局系统(layout system),一次布局可以支持所有平台与移动设备,不管是用原生元素还是基于Graphics的元素。

    面板 Panels

    面板可以包含若干UI子元素,根据不同的面板类型,按不同规则进行布局,下面是几个常见的面板标记类型。

    Panel标记

    最基本的面板类型就是Panel标记,Panel内的子元素会占用它的整个空间,如果是几个子元素,他们会依次层叠在一起,加以AlignmentmarginPadding属性,足以应对很多情况了。

    <Panel>
        <Text>This...</Text>
        <Text>...will be on top of this</Text>
        <Rectangle Alignment="BottomLeft" Height="20" Width="20" Fill="#678" />
    </Panel>
    

    可以将Panel里的元素想象成Photoshop里的层一样,最先出现在UX文件里的元素在最上层,其它依次位于下层。

    StackPanel 堆栈式面板

    StackPanel将子元素堆叠排列,缺省是垂直布局,如果想水平排列,可以使用Orientation属性。

    <StackPanel Orientation="Horizontal">
        ... elements ...
    </StackPanel>
    

    另外,除了单独设置子元素各自的Margin值外,子元素的间距还可以在StackPanel里用一个ItemSpacing属性来指定,如下所示:

    <StackPanel ItemSpacing="20">
        <Panel Height="100" Background="Red"/>
        <Panel Height="100" Background="Green"/>
        <Panel Height="100" Background="Blue"/>
    </StackPanel>
    

    Grid 网格

    使用网络系统布局子元素,一种是用RowsColumns属性明细的指定行与列,另一种是简单的用RowCountColumnCount属性分配行数与列数。

    RowCount & ColumnCount

    如果需要等高等宽的行与列,这样的网格直接指定行数与列数即可:

    <Grid RowCount="4" ColumnCount="2"/>
    

    Rows & Columns

    RowsColumns属性让你可以更精确的控制行与列的大小。这些属性的参数是一个用逗号分开的清单,值可以是绝对的、相对的或自动的。

    下面是个三行网格,行的高度分别为10、10和50(点)。

    <Grid Rows="10,10,50"/>
    

    同样是三行网格,前两行的高度各占20%,第三行占60%:

    <Grid Rows="1*,1*,3*"/>
    

    行的大小是这么计算的,先将所有数字相加1+1+3=5,然后每个数字除以总数字1/5=20%、1/5=20%、3/5=60%。

    接下来的三行网格,前两行将占用最大的子元素的空间,最后一行占用剩下的:

    <Grid Rows="auto,auto,1*"/>
    

    使用网格布局元素

    默认的情况,依次出现在UX文件的元素,会从左到右,从上到下的排列。你也可以给元素指定具体的网格, 如下所示:

    <Grid RowCount="1" ColumnCount="2">
        <Rectangle Row="0" Column="1" Fill="Red"/>
        <Rectangle Row="0" Column="0" Fill="Blue"/>
    </Grid>
    

    包围面板 WrapPanel

    WrapPanel面板依次排列子元素直到最后一起包起来,元素的排列方向可以用 FlowDirection来设定,从左到右,或者从右到左。

    水平从右到左排列的WrapPanel见下例:

    <WrapPanel FlowDirection="RightToLeft">
        <Each Count="10">
            <Rectangle Margin="5" Width="100" Height="100" Fill="Blue"/>
        </Each>
    </WrapPanel>
    

    使用Orientation属性设置垂直排列的WrapPanel见下例:

    <WrapPanel Orientation="Vertical">
        <Each Count="10">
            <Rectangle Margin="5" Width="100" Height="100" Fill="Blue"/>
        </Each>
    </WrapPanel>
    

    WrapPanel还有两个属性:ItemWidthItemHeight用来定位一个元素的最大占用空间。

    停靠面板 DockPanel

    DockPanel可以将它的子元素依次停靠在不同的屏幕边上,每个元素可以用Dock属性指定停靠在那条边上。

    <Rectangle Dock="Left"/>
    

    Dock的有效值有:LeftRightTopBottomFill(缺省值)。

    <DockPanel>
        <Style>
            <Rectangle MinWidth="100" MinHeight="200"/>
        </Style>
        <Rectangle Fill="Red" Dock="Left"/>
        <Rectangle Fill="Green" Dock="Top"/>
        <Rectangle Fill="Blue" Dock="Right"/>
        <Rectangle Fill="Yellow" Dock="Bottom"/>
        <Rectangle Fill="Teal" />
    </DockPanel>
    

    上例中,Style给出了矩形的最小值,而Rectangle内并未给明尺寸,所以DockPanel会尽量用那个最小值去排列每个矩形,除非Dock属性设置为Fill

    Viewbox

    Viewbox标记让一个元素拉伸填充一个区域:

    <Viewbox>
        <Rectangle Background="#808" Width="200" Height="100" />
    </Viewbox>
    

    上例中的矩形拉伸到Viewbox的大小时,会始终保持2:1的比例。

    拉伸的方向可以用StretchDirection属性来设置:

    • Both - 上下同时
    • UpOnly - 仅向上
    • DownOnly - 仅向下

    除了DownOnly外,其它设置可能会产生伪像素,因为Viewbox将其内容执行的是位图拉伸。

    内容可以设置StretchMode属性,缺省值为Uniform

    相关文章

      网友评论

          本文标题:【译】Fuse入门(八)

          本文链接:https://www.haomeiwen.com/subject/tdpbhttx.html