Board logo

标题: 创建一种声明性 XML UI 语言 -3 [打印本页]

作者: look_w    时间: 2018-8-23 19:59     标题: 创建一种声明性 XML UI 语言 -3

如果不深入检查,这个 XML 模式的描述性似乎已经足够了。 展示了另外几个元素。
清单 3. 声明性 XML UI 模式:更多元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
...
<xs:element name="CustomDialog">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="xui:GridLayout"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="xuianel"/>
    </xs:sequence>
    <xs:attribute name="modal" type="xs:boolean" use="required"/>
    <xs:attribute name="idref" type="xs:IDREF" use="optional"/>
    <xs:attribute name="name" type="xs:string" use="required"/>
    <xs:attribute name="id" type="xs:ID" use="required"/>
    <xs:attribute name="x" type="xs:short" use="required"/>
    <xs:attribute name="y" type="xs:short" use="required"/>
    <xs:attribute name="width" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="height" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="visible" type="xs:boolean" use="required"/>
  </xs:complexType>
</xs:element>

<xs:element name="anel">
  <xs:complexType>
    <xs:sequence>
      <xs:element maxOccurs="1" minOccurs="1" ref="xui:GridLayout"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Button"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Calendar"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:CheckBox"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:ComboBox"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:HypertextPane"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Image"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xuiabel"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xuiist"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xuiasswordField"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xuirogressBar"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:RadioButton"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:SliderBar"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Table"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:TextArea"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:TextField"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Tree"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="x" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="y" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="width" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="height" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="name" type="xs:string" use="required"/>
    <xs:attribute name="id" type="xs:ID" use="required"/>
    <xs:attribute name="idref" type="xs:IDREF" use="optional"/>
  </xs:complexType>
</xs:element>

<xs:element name="RadioButton">
  <xs:complexType>
    <xs:sequence>
      <xs:element maxOccurs="3" minOccurs="0" ref="xui:Image"/>
    </xs:sequence>
    <xs:attribute name="label" type="xs:string" use="required"/>
    <xs:attribute name="x" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="y" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="width" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="height" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="enabled" type="xs:boolean" use="required"/>
    <xs:attribute name="selected" type="xs:boolean" use="required"/>
    <xs:attribute name="id" type="xs:ID" use="required"/>
    <xs:attribute name="orientation" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="horizontal"/>
          <xs:enumeration value="vertical"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
</xs:element>
...




注意,清单中没有存储任何易变的状态信息 — 只保护可能有助于 GUI 组件重建的状态信息。其中一个例子是 CustomDialog 元素的状态信息:
Panel 是一个中级容器,可以包含相当多的原子组件。再看一下 ,Panel 拥有一个 GridLayout,可以选择在 Panel 内不放置原子组件,也可以根据需要放置任意数量的原子组件。Panel 本身具有 xy 坐标。Panel 使用 xy 坐标引用父容器的 GridLayout 中的定位,而不是引用桌面中的像素(就像 CustomDialog 一样)。就像俄罗斯玩偶一样,这种嵌套构造法非常类似于 Swing 的布局规则。了解上述基本知识后,现在可以解决软件实现问题了。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0