XAF应用开发教程(七)外观控制模块
很多时候,我们需要按照不同的条件显示不同的效果,在传统的软件开发中,我们会直接使用 控件名称.BackColor,Enable,Visible等属性进行控制。
如果一个业务对象在多处使用,要么我们会去一个地方一个地方的修改,要么会集中代码做个方法进行控制。
在XAF中,就实现了一处控制全局生效的方法。
下面我们来看看外观模块:
上图中展示了几种效果:1,整行红色背景。2,蓝色字体加删除线。3编辑时控件禁用。4.单元格颜色变化。
详细界面中,同样生效了,上面两幅图,一个是web的,一个winform的。
下面我们演示如何制作相同的效果:
- [DefaultClassOptions]
- //[ImageName("BO_Contact")]
- //[DefaultProperty("DisplayMemberNameForLookupEditorsOfThisType")]
- //[DefaultListViewOptions(MasterDetailMode.ListViewOnly, false, NewItemRowPosition.None)]
- //[Persistent("DatabaseTableName")]
- // Specify more UI options using a declarative approach (https://documentation.devexpress.com/eXpressAppFramework/CustomDocument112701.aspx).
- [Appearance("红色禁用","ViewItem", BackColor ="Red",TargetItems ="*",Criteria ="禁用")]
- [Appearance("蓝色未审批","ViewItem", BackColor = "Blue", TargetItems = "*", Criteria = "!已审核")]
- public class 客户 : BaseObject
- {
在客户类上面写两条Appearance Attribute即可。
先看效果:
很简单的两条语句就有了效果,点击进入详细视图后,也是同样生效的。
我们再去XAFML看看外观规则:
看起来比代码下面容易理解多了,但是XAF的开发人员习惯是在代码中写规则,这样更快,否则还要切换到xafml中,一会写代码,一会设置xafml也是够烦了。
所以我们的选择就是传说中的code first充血模型。
下面把上图中每个属性的功能说一下:
AppearanceItemType:要控制的项目
值 | 说明 | |
---|---|---|
![]() |
Action | 要控制的是按钮 |
![]() |
LayoutItem | 详细界面中使用的布局项目的名称 |
![]() |
ViewItem | 可以简单的理解为属性的名称,在详细视图中除了属性会生成对应的ViewItem,还可以手工的建立如静态文本、静态图像类的ViewItem,当然那些也在控制范围内。 |
Context:
可选值 | Appearance Rule's Activity Scope | 举例 |
---|---|---|
内置了三种类型 DetailView ListView Any. | 详细视图,列表视图或所有视图. | Any |
指定的视图ID | 只生效于指定的视图. | MyClass_ListView;MyClass_DetailView |
Any;视图名称 | 所有视图,但除Any后面列出的视图名称 | Any;MyClass_ListView;MyClass_LookupListView |
"DetailView" 或 "ListView" 后跟视图名称. | 所有列表视图,和指定的视图 | DetailView;MyClass_ListView |
Criteria:满足指定的条件时生效,如 年龄>20
Method:可以在指定的方法返回true值时规则才生效,如:
- using DevExpress.ExpressApp.ConditionalAppearance;
- //...
- public class Product : BaseObject {
- public Product(Session session) : base(session) { }
- public decimal Price {
- //...
- }
- public ProductStatus Status {
- //...
- }
- [Appearance("RuleMethod", AppearanceItemType = "ViewItem", TargetItems = "*", Context = "ListView",
- BackColor = "Green", FontColor = "Black")]
- public bool RuleMethod() {
- if (Price < && Status == ProductStatus.Active) {
- return true;
- }
- else {
- return false;
- }
- }
- }
- Priority :如果有多个规则应用于同一个元素上,将按这个优先级决定哪个会生效,值越大优先级越高。
TargetItems:
示例 | 说明 |
---|---|
"TargetElementId" 目标元素ID | 比如填写属性的名称,LayoutItem的名称 |
"TargetElementId1;TargetElementId2" | 多个元素的ID,使用分号分隔 |
"*" | 所有元素 |
"*;TargetElementId1;TargetElementId2" | 所有元素,除*号后面的指定的元素之外 |
BackColor:背景颜色
Enable:如果指定的是ViewItem,LayoutItem是指控件是否可用。如果是按钮,是指是否可以点击。
FontColor:字体颜色
FontStyle:字体样式,比如加粗,加删除线之类的。
Visibility:是否可见。
下表展示了效果生效的环境:
个性化 | 列表单元格 | 列表编辑模式 | 详细视图 |
详细视图 静态文字 |
布局项目 | 布局组、TAB | 按钮 |
---|---|---|---|---|---|---|---|
Font Color | 支持 | 支持 | 支持 | 支持 | 支持 | ||
Font Style | 支持 | 支持 | 支持 | 支持 | 支持 | ||
Back Color | 支持 | 支持 | 支持 | 支持 | |||
Enabled/Disabled | 支持 | 支持 | 支持 | ||||
Visible/Invisible | 支持 | 支持 | 支持 | 支持 |
比如,在列表中,Visible的控制,一个列表有很多行所以肯定是没办法做到有些行的内容是隐藏的,有些行的内容是可见的。
Appearance的功能就介绍到这里。
QQ4603528 群:336090194
XAF应用开发教程(七)外观控制模块的更多相关文章
- XAF应用开发教程(一) 创建项目
XAF是DevExpress公司的快速开发框架,全称eXpress Application Framework,是企业信息系统的开发利器,快速开发效果显著,在.net框架中,笔者至今没有找到一款可以与 ...
- XAF应用开发教程(八) 汉化与多国语言支持
使用了XAF开发时,汉化是一个比较常的问题. 要实现汉化很简单: 1.在这里下载汉化资源文件.这里演示的版本是15.1.X的 2.文件下载后将:文件解压到目录 <你的项目>\BIN\ ...
- XAF应用开发教程-内置Attribute功能列表
在 XAF 框架,一些用来生成一个业务应用程序的信息是在Attribute中指定.您可以将属性应用到业务类 (或它的成员) 指定验证规则,指定如何对数据进行显示. 设置关系类等.本主题提供了有关在何处 ...
- XAF应用开发教程(五)验证模块
数据验证是应用程序开发中使用频率最高的功能模块,本节详细介绍一下XAF中如何使用验证模块. XAF 验证模块内置了下面的一些验证规则: 验证规则类型 说明 RuleCombinationOfPrope ...
- XAF应用开发教程(六)控制器
是的,XAF也是MVC结构的,但不仅限于MVC,ViewModel也存在,它是一项复合技术,AOP,ORM,MVC都有. 真实运行的系统中,仅有增删改查功能肯定是远远不够的,ERP.CRM等系统的开发 ...
- XAF应用开发教程(四)应用程序模型
XAF是重量型框架,确实够重量的,方方面面都做得规规矩矩. 如果看了前面三节,可能会认为,这N多的Attribute到底都是从哪里来的?到底有多少这样的Attribute?如果不够用了怎么办?等着官方 ...
- XAF应用开发教程(三)业务对象模型之引用类型与关联关系
本节介绍信息系统开发中最常见的问题,引用关系,一对多关系,多对多关系. 以客户信息为例,客户通常需要客户分类,如VIP客户,普通客户,潜在客户.当然,我们可以定义枚举类型进行定义出这个类型,并在客户类 ...
- XAF应用开发教程(二)业务对象模型之简单类型属性
使用过ORM的朋友对这一部分理解起来会非常快,如果没有请自行补习吧:D. 不说废话,首先,我们来开发一个简单的CRM系统,CRM系统第一个信息当然是客户信息.我们只做个简单 的客户信息来了解一下XAF ...
- Android OpenGL ES 开发教程 从入门到精通
感谢,摘自:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ...
随机推荐
- Linux计划任务,自动删除n天前的旧文件【转】
转自:http://blog.csdn.net/jehoshaphat/article/details/51244237 转载地址:http://yaksayoo.blog.51cto.com/510 ...
- java数组初始化
java数组初始化 //静态初始化数组:方法一 String cats[] = new String[] { "Tom","Sam","Mimi&qu ...
- Java SE、Java EE和Java ME有什么区别?
Java现在已不仅仅是一种语言,从广义上说,它代表了一个技术体系.该体系根据应用方向的不同主要分为Java SE.Java EE和Java ME的3个部分. 1998年12月份Sun公司公布的Java ...
- webservice引用spring的bean
<jaxws:endpoint address="/test/webservice" implementor="#testBean" /> 这行代码 ...
- iOS开发 爱特开发技术bug总结
#pragma mark 每天总结学习两小时 效率 和 每天学习 研究底层 多进去看看 // .................................................... ...
- 怎么使用Docker搭建PHP开发环境呢?
在Docker流行之前,要搭建开发环境通常有两种选择:一种是使用wamp.xampp.mamp等集成开发环境安装包,另外一种就是使用普通虚拟机来安装linux服务器,然后通过下载一键安装包(如:lnm ...
- HDU 5961:传递(暴搜)
http://acm.hdu.edu.cn/showproblem.php?pid=5961 题意:中文题意.给出两个图,判断这个两个图是否都是传递的.注意一下传递的定义要看清,一开始没看清连样例都看 ...
- 关于Oracle过程,函数的经典例子及解析
一,Oracle中的过程,函数 对于oracle中的过程和函数,个人觉得可以化为一类,因为它们在写法上并没有什么的不同.公式无非就是 create or replace Package_name(pa ...
- iOS开发系列之 itms-services 协议
通过 itms-services 协议,发布或者分享 iOS 应用程序 通过 itms-services 协议,发布或者分享 iOS 应用程序 <button onclick="w ...
- hdwiki model目录下的函数类
model目录下的函数类 actions.class.php(站内地图相关) getHTML:获得页面菜单和相关信息 getMap:生成站内地图 adv.class.php 对wiki_adve ...