很多时候,我们需要按照不同的条件显示不同的效果,在传统的软件开发中,我们会直接使用 控件名称.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应用开发教程(七)外观控制模块的更多相关文章

  1. XAF应用开发教程(一) 创建项目

    XAF是DevExpress公司的快速开发框架,全称eXpress Application Framework,是企业信息系统的开发利器,快速开发效果显著,在.net框架中,笔者至今没有找到一款可以与 ...

  2. XAF应用开发教程(八) 汉化与多国语言支持

    使用了XAF开发时,汉化是一个比较常的问题. 要实现汉化很简单: 1.在这里下载汉化资源文件.这里演示的版本是15.1.X的 2.文件下载后将:文件解压到目录    <你的项目>\BIN\ ...

  3. XAF应用开发教程-内置Attribute功能列表

    在 XAF 框架,一些用来生成一个业务应用程序的信息是在Attribute中指定.您可以将属性应用到业务类 (或它的成员) 指定验证规则,指定如何对数据进行显示. 设置关系类等.本主题提供了有关在何处 ...

  4. XAF应用开发教程(五)验证模块

    数据验证是应用程序开发中使用频率最高的功能模块,本节详细介绍一下XAF中如何使用验证模块. XAF 验证模块内置了下面的一些验证规则: 验证规则类型 说明 RuleCombinationOfPrope ...

  5. XAF应用开发教程(六)控制器

    是的,XAF也是MVC结构的,但不仅限于MVC,ViewModel也存在,它是一项复合技术,AOP,ORM,MVC都有. 真实运行的系统中,仅有增删改查功能肯定是远远不够的,ERP.CRM等系统的开发 ...

  6. XAF应用开发教程(四)应用程序模型

    XAF是重量型框架,确实够重量的,方方面面都做得规规矩矩. 如果看了前面三节,可能会认为,这N多的Attribute到底都是从哪里来的?到底有多少这样的Attribute?如果不够用了怎么办?等着官方 ...

  7. XAF应用开发教程(三)业务对象模型之引用类型与关联关系

    本节介绍信息系统开发中最常见的问题,引用关系,一对多关系,多对多关系. 以客户信息为例,客户通常需要客户分类,如VIP客户,普通客户,潜在客户.当然,我们可以定义枚举类型进行定义出这个类型,并在客户类 ...

  8. XAF应用开发教程(二)业务对象模型之简单类型属性

    使用过ORM的朋友对这一部分理解起来会非常快,如果没有请自行补习吧:D. 不说废话,首先,我们来开发一个简单的CRM系统,CRM系统第一个信息当然是客户信息.我们只做个简单 的客户信息来了解一下XAF ...

  9. Android OpenGL ES 开发教程 从入门到精通

    感谢,摘自:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ...

随机推荐

  1. 160909、Filter多方式拦截、禁用IE图片缓存、Filter设置字符编码

    dispatcher多方式拦截 我们来看一个例子 我们定义一个index.jsp,里面有一个链接跳转到dispatcher.jsp页面 <body> <a href="di ...

  2. Terminal的快捷键 for Terminal for Mac OS 10.10, Linux/GNU(Ubuntu, deepin, elementory os,CentOS)

    对于习惯用windows键盘的,突然转成Mac蓝牙键盘真的有点不习惯,尤其是多了⌘这个键,还有Alt键也成了Option 但是对于Windows下熟悉的快捷键,它们真的失效了,还好Ubuntu也常用, ...

  3. cronolog日志切割

    1. 下载安装 cronolog,它的主页 http://cronolog.org . 下载的是源码,安装过程就是 ./configure, make, make install,最后一步可直接把 s ...

  4. struts2的两个核心配置文件

    struts2的两个核心配置文件,即:struts.default.xml和struts.properties A,位置:都在struts2-core-version.jar文件中 B,作用,stru ...

  5. 工具项与菜单项实现相同的功能(DevExpress)

    1.在工具栏中添加菜单项.如下:在bar1工具栏中添加菜单项this.barButtonMenuItem(包含图标) this.bar1.LinksPersistInfo.AddRange(new D ...

  6. ORACLE--分区表数据清理

    由于分区表数据增加:没做清除操作:导致表空间告急.需要清理很久之前的数据:释放空间.步骤如下 一,查看哪个表占的空间 SELECT t.segment_name, SUM(t.bytes / 1024 ...

  7. [vuforia][unity3d]资源链接

    http://bbs.csdn.net/topics/390787189 CSDN论坛中 “Qualcomm Vuforia(AR虚拟现实)开发” 主题资源下载 http://bbs.csdn.net ...

  8. C语言的数组名和对数组名取地址

    http://blog.csdn.net/zdcsky123/article/details/6517811 相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针, ...

  9. 20150626_Andriod_02_ListView2_列表与详细信息

    android listview 参考地址: http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html  http://xy ...

  10. 山东理工大学第七届ACM校赛-LCM的个数 分类: 比赛 2015-06-26 10:37 18人阅读 评论(0) 收藏

    LCM的个数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 对于我们来说求两个数的LCM(最小公倍数)是很容易的事,现在我遇到了 ...