线性仪表的组件定位

大部分组件在线性仪表中的定位方式,与其在径向仪表中是一样的。

不同的是SingleMark和SingleLabel,在径向仪表中,如果二者没有指定Value和PointerIndex属性,则需要同时指定Location属性和Angle属性才能显示,而在线性仪表中,则需要同时指定Location和Position属性才能显示。

对于水平线性仪表,Location用于指定垂直位置(0到100之间),Position用于指定水平位置(0到1之间),垂直线性仪表则反之。

你可以理解Poision为数据轴方向的位置,Location为垂直于数据轴反向的位置。

接下来我们要从零开始,设计一个下图所示的仪表(来自仪表库),这个仪表基本涵盖了线性仪表的全部定位知识点:

设计步骤:

1、首先增加一个线性仪表,为方便学习,我先其背景颜色设置为绿色:

2、增加一个Range,将其Location属性设置为50(可以看到Range垂直居中),然后设置好Range的边框和填充颜色:

3、我们需要仪表的两侧腾出空间放置其他组件,所以回到Gauges的属性设置窗口,将AxisStart设置为0.25,AxisLength设置为0.55,得到:

提示:AxisStart表示左侧起点为0.25(左侧留空0.25),AxisLength表示工作区长度为0.55,因为0.25+0.55=0.8,所以右侧留空了0.2。

4、在FaceShpes增加一个Rectangle,设置好边框和填充颜色,得到:

5、Rectangle和长度和宽度默认都是-1,位于AxisStart、AxisLength、BaseOrigin和BaseFactor四个属性决定的有效工作区域内。

现将将Rectangle的Width设置为-1.76(宽度放大1.76倍),CenterPointX设置为0.455(左移0.045),得到:

接下来不需要绿色背景来辅助定位了,将Gauges控件颜色设置回Transparent(透明)

6、在Decorators集合中增加2个SingleMark,Location属性都设为50,Position属性一个为-0.25,另一个为1.15,设置好边框和填充颜色,得到:

7、 在Decorators集合中增加2个SingleLabel,Text属性分别为"-"和"+",Position属性一个为-0.25,另一个为1.15,设置好字体和颜色,得到:

8、在Decorators集合中增加一个SingleLabel,Location属性设置为23,Positoion属性设置为0.5(水平居中),PointerIndex属性设置为100(用于显示当前值),Format属性设置为"0.0"(保留1位小数),设置好字体和颜色,得到:

9、在Decorators集合中增加一个SingleLabel,Text属性设置为"Off",Location属性为75,Position属性为-0.08,设置好字体和颜色,得到:

10、在Decorators集合中增加一个SingleMark,Location属性为50,Position属性为-0.08,Shape属性为Round,Width属性为7,设置好边框和填充颜色,得到:

11、最后设置指针,将Pointer的Offset属性设为50, Length属性设为25,Alignment属性设为Center,Shape属性设为"Round", Width属性设置为12,设置好边框和填充颜色,得到:

12、将仪表的OffPosition设置为0.21, 为什么是0.21? 因为前面已经将AxisStart设置为0.25,0.21 - 0.25 = -0.04,所以从工作区起点往左移动0.04,就是OffPosition位置:

至此这个仪表设计完毕,没有刻度和标签,通过一个SingleLabel显示当前值:

当将仪表的值设置为Double.NaN是,指针会停靠在Off位置:

我已经将上述设计保存为一个模版,单击下载模板文件

养成命名组件的习惯

你应用上面的模板后,打开Decorators编辑窗口,可以看到我给大部分组件都设置了Name属性 ,这样一看到"minusButton",就知道这个SingleMark是减号按钮:

如果没有Names属性,是很难区分一堆类似的组件,只能通过反复设置Visible属性来判断其对应关系:


本页地址:http://www.foxtable.com/webhelp/topics/3917.htm