本教程中,我们将逐步介绍如何创建此窗体。 另外,我们还将介绍一些高级主题,如动态调整字段大小以填充可用空间。

如果您是初次接触 Power Apps(或者仅自动生成过应用),则在深入了解本文前请 从头开始构建一个应用 。 通过从头开始生成一个应用,会让您熟悉本文中提及但未加说明的必备概念,例如添加数据源和控件。

撰写本文时,假设您有一个名为 销售订单 的数据源,其包含上图中的字段。 如果您有 Power Apps 每用户、每应用或试用许可证以及系统管理员或系统定制员权限,您可以在 Microsoft Dataverse 中 创建表 并添加类似的字段。

  • 从头开始创建平板电脑应用,然后添加您的数据源。

    本文中介绍的所有内容同样也适用于手机布局,不同之处在于,手机应用通常只有一个垂直列。

  • 添加垂直的 控件,并将其 Items 属性设置为 'Sales order'

    (可选)若要与本教程中的示例一致,请将库的 布局 设置为仅显示 标题和副标题

    在本教程之外,可以将 编辑窗体 控件放置在同一个屏幕上,但将其放在单独屏幕上时可使用的空间会更多。

  • 在新屏幕的顶部,添加一个 标签 控件,将其 Text 属性设置为此表达式:
    "Sales Order " & Gallery1.Selected.SalesOrderId

    该标签将显示您在库中选择的记录的销售订单号。

  • (可选)将该标签的格式设置如下:

  • 将其 Align 属性设置为 Center

  • 将其 Size 属性设置为 20

  • 将其 Fill 属性设置为 Navy

  • 将其 Color 属性设置为 White

  • 将其 Width 属性设置为 Parent.Width

  • 将其 X Y 属性设置为 0

  • 添加一个 编辑窗体 控件,然后移动并调整控件大小,以使其填充标签下方的屏幕。

    在后续步骤中,通过使用右窗格(而非公式栏)将窗体控件连接到 销售订单 数据源。 如果使用公式栏,该窗体将默认不显示任何字段。 始终可以通过在右窗格中选择一个或多个复选框来显示所需的任意字段。

  • 在右侧窗格中,依次单击或点击 未选定数据源 旁边的向下箭头和 销售订单

    销售订单 数据源中的默认字段集将以简洁的三列布局显示。 但是许多为空,可能需要一些时间才能到达其最终位置。

  • 将该窗体的 Item 属性设置为 Gallery1.Selected

    此窗体会显示您在库中所选的记录,但是默认的字段集可能与您在最终产品中所需的内容不一致。

  • 在右窗格中,通过取消选中其复选框隐藏以下各个字段:

    销售订单 ID
  • 客户联系人
  • 通过将 订单状态 字段拖到左侧,然后将其拖到 客户采购订单参考 字段的另一侧来移动它。

    屏幕应类似于下面的示例:

    跨多个列调整卡大小

    根据各个卡中的数据,可能需要让某些卡适应单个列的大小,让其他卡跨越多个列。 如果卡包含的数据多于想要在单个列中显示的内容,可以将卡选中,然后拖动其选择框左或右边框处的握柄来将卡加宽。 拖动握柄时,卡将“对齐”到列边界。

    若要使设计更为灵活但保持某些结构,可以将列数增加到 12。 进行此更改后,可以轻松地将各个卡配置为跨越整个窗体、半个窗体、三分之一窗体、四分之一窗体、六分之一窗体等。 我们来看一下实际操作。

  • 在右窗格中,将窗体中的列数设置为 12

    许多卡一开始就对属性使用了动态公式。 例如,我们在上面移动并调整大小的 文本输入 控件就包含以父级宽度为依据的 Width 属性。 移动控件或调整其大小后,这些动态公式将被替换为静态值。 如果需要,可以使用公式栏还原动态公式。

    禁用“对齐到列”

    有时,可能需要进一步控制,而标准的 12 列无法实现这一点。 在这种情况下,可以禁用 对齐到列 ,然后手动设置数据卡的位置。 窗体将继续对齐 12 列,不过在开始调整大小或重新放置后,您还是可以按住 Alt 或 Ctrl+Shift 键来替代捕捉点。 有关详细信息,请参阅 替代行为键盘快捷方式

    在我们的示例中,构成第三行地址的四个组件的宽度完全相同。 不过,这可能并不是最佳布局,因为城市名称长于州/省/自治区/直辖市缩写,并且“国家/地区”的文本输入框较短,这是由于其标签长度所致。 若要优化此空间,请在右窗格中禁用 对齐到列 ,然后在开始调整大小和放置这些卡片后,按住 Alt 或 Ctrl+Shift 键。

    仔细定位后,每个字段的大小适当,字段水平间距匀称:

    设置宽度和高度

    与 Power Apps 中的所有内容一样,窗体布局受数据卡控件属性约束。 如前面所述,可以通过将控件拖到不同的位置或拖动握柄来调整控件的大小,从而更改这些属性的值。 不过,有时也会需要更精准地了解并控制这些属性,尤其是在使用公式生成动态窗体时。

    基本布局:X、Y 和 Width

    X Y 属性控制卡的位置。 处理原始画布上的控件时,这些属性生成的是绝对位置。 在窗体中,这些属性的含义就不同了:

    X :行内顺序。
  • Y :行号。

    与画布上的控件类似, Width 属性指定的是数据卡的最小宽度(很快将会对下限进行详细介绍)。

    让我们来看看窗体中卡的 X Y Width 属性:

    如果某行上的数据卡过宽而无法适应此行,会怎么样? 通常情况下,不必担心这种可能性。 如果已启用 对齐到列 ,这三个属性会自动进行调整,以便所有内容都能很好地适应行,而不会溢出。

    不过,如果已禁用 对齐到列 或公式中的 Width 以一张或多张数据卡为依据,则可能会发生行溢出。 在这种情况下,数据卡会自动换行,以便有效地创建其他行。 例如,我们会将 客户采购订单参考 数据卡(第一行中的第三项)的 Width 属性手动更改为 500

    最上面一行中的三张数据卡不再适应水平空间,并且创建了其他行,以将溢出内容自动换行。 所有这些数据卡的 Y 坐标仍保持 0 不变,而 名称 说明 数据卡的 Y 坐标也仍为 1。 具有不同 Y 值的卡不会跨行合并。

    可以使用此行为创建完全动态的布局,即数据卡根据 Z 顺序进行排列,尽可能填充所在行,然后再移到下一行。 若要达到此效果,请为所有数据卡设置相同的 Y 值,再使用 X 表示数据卡的顺序。

    填充空间:WidthFit

    上一示例中的溢出导致第一行中第二张 订单状态 卡后面有空间。 为了填充此空间,我们可以手动调整两张剩余数据卡的 Width 属性,但此方法会很麻烦。

    作为备选方法,可以使用 WidthFit 属性。 如果某行中的一张或多张数据卡将此属性设置为 true ,则此行上的任何剩余空间都会被数据卡均分。 正因为此行为,我们在前面提到,数据卡的 Width 属性为 最小 ,而显示的宽度可能会更大。 此属性不会使卡片缩,只会使其扩大。

    如果将 订单状态 卡上的 WidthFit 设置为 true ,其将填充可用空间,而第一张卡将保持不变:

    这些数据卡的握柄将 WidthFit 带来的额外宽度考虑在内,而不考虑 Width 属性规定的最小宽度。 如果已启用 WidthFit ,那么控制 Width 属性可能会引起混淆;建议禁用“WidthFit”,更改 Width 属性,再重新启用“WidthFit”。

    WidthFit 何时有用? 如果某字段只在特定情况下才使用,则可以将它的 Visible 属性设置为 false ,这样此行上的其他数据卡便会自动填充它周围的空间。 建议使用公式,以便仅在另一个字段包含特定值时显示字段。

    此时,我们将 订单状态 字段的 Visible 属性设置为静态 false

    在有效删除第二张数据卡的情况下,第三张数据卡现在可以恢复与第一张数据卡位于同一行。 第一张数据卡仍将 WidthFit 设置为 true ,因此,只有它会扩展宽度来填充可用空间。

    由于 订单状态 不可见,因此,不能像在画布上一样轻松选择它。 但是,可以在屏幕左侧的控件层次列表中选择任何可见或不可见的控件。

    Height 属性约束每张数据卡的高度。 对于 Height ,数据卡也有等同于 WidthFit 的属性,并且始终设置为 true 。 假定存在 HeightFit 属性,但是请勿在产品中寻找它,因为尚未发布此类属性。

    因为无法禁用此行为,所以更改数据卡的高度可能比较棘手。 行中的所有数据卡都与最高数据卡等高。 看到的行可能会如下所示:

    哪张数据卡决定了行高? 在上图中,虽然选择了显得很高的 总金额 数据卡,但它的 Height 属性值为 80 (与第一行的高度相同)。 若要缩减行高,必须缩减该行中高度最大的卡的 Height 属性,并且只有查看每个卡片的 Height 属性才能识别出高度最大的卡。

    AutoHeight

    如果卡包含的控件将 AutoHeight 属性设置为 true ,则该卡也可能高于您所需的高度。 例如,许多卡都包含一个标签,以便在字段值导致验证问题时显示错误消息。

    如果没有任何文本要显示(无错误),那么此标签的高度将折叠为零。 如果对此不甚了解,就不会知道此类标签的存在,而此类标签应该如下所示: