在 Windows 窗体应用程序中,按下回车或双击列表会打开默认的详细视图。

在 ASP.NET Web 应用程序中,单击对象时执行此操作。

这一行为是由 ListViewProcessCurrentObjectController 的 ListViewProcessCurrentObjectController.ProcessCurrentObjectAction 按钮所定义的。

可以将此操作替换为自定义的简单操作。下面演示如何执行此操作。

示例代码在这里。

有下面的BO定义,地址记录。

[DefaultClassOptions, ImageName("BO_Contact")]
public class AddressBookRecord : BaseObject {
public AddressBookRecord(Session session) : base(session) { }
private string name;
public string Name {
get { return name; }
set { SetPropertyValue("Name", ref name, value); }
}
private string email;
public string Email {
get { return email; }
set { SetPropertyValue("Email", ref email, value); }
}
private string phoneNumber;
public string PhoneNumber {
get { return phoneNumber; }
set { SetPropertyValue("PhoneNumber", ref phoneNumber, value); }
}
}

现在并为AddressBookRecord 对象操作加一个WriteMailController,并填加 WriteMail Action。这个操作将调用与最终用户的计算机上的 MailTo 协议相关联的程序。说白了就是发个邮件,调用邮件客户端。

using System.Diagnostics;
// ...
public class WriteMailController : ViewController {
private SimpleAction writeMailAction;
public WriteMailController() {
TargetObjectType = typeof(AddressBookRecord);
writeMailAction = new SimpleAction(this, "WriteMail", PredefinedCategory.Edit);
writeMailAction.ToolTip = "Write e-mail to the selected address book record";
writeMailAction.SelectionDependencyType = SelectionDependencyType.RequireSingleObject;
writeMailAction.ImageName = "BO_Contact";
writeMailAction.Execute += writeMailAction_Execute;
}
void writeMailAction_Execute(object sender, SimpleActionExecuteEventArgs e) {
AddressBookRecord record = (AddressBookRecord)e.CurrentObject;
string startInfo = String.Format(
"mailto:{0}?body=Hello, {1}!%0A%0A", record.Email, record.Name);
Process.Start(startInfo);
}
}

默认情况下,只有选中了列表中的一条记录后,再点击上面我们填加的按钮,才会执行调用邮件客户端的动作。

下面,我们演示,在win中双击列表,即执行上面的动作。

using DevExpress.ExpressApp.SystemModule;
// ...
public class WriteMailController : ViewController {
// ...
private ListViewProcessCurrentObjectController processCurrentObjectController;
protected override void OnActivated() {
base.OnActivated();
processCurrentObjectController =
Frame.GetController<ListViewProcessCurrentObjectController>();
if (processCurrentObjectController != null) {
processCurrentObjectController.CustomProcessSelectedItem +=
processCurrentObjectController_CustomProcessSelectedItem;
}
}
private void processCurrentObjectController_CustomProcessSelectedItem(object sender, CustomProcessListViewSelectedItemEventArgs e) {
e.Handled = true;
writeMailAction.DoExecute();
}
protected override void OnDeactivated() {
if (processCurrentObjectController != null) {
processCurrentObjectController.CustomProcessSelectedItem -=
processCurrentObjectController_CustomProcessSelectedItem;
}
base.OnDeactivated();
}
}

下面是效果:

这时你会发现,你没办法修改记录了,即详细视图没办法显示出来了。下面代码来解决这样的问题,即,加个控制器,实现这些功能。

using DevExpress.ExpressApp.SystemModule;
// ...
public class EditAddressBookRecordController : ViewController<ListView> {
public EditAddressBookRecordController() {
TargetObjectType = typeof(AddressBookRecord);
SimpleAction editAddressBookRecordAction =
new SimpleAction(this, "EditAddressBookRecord", PredefinedCategory.Edit);
editAddressBookRecordAction.ImageName = "Action_Edit";
editAddressBookRecordAction.SelectionDependencyType =
SelectionDependencyType.RequireSingleObject;
editAddressBookRecordAction.Execute += editAddressBookRecordAction_Execute;
}
void editAddressBookRecordAction_Execute(object sender, SimpleActionExecuteEventArgs e) {
ListViewProcessCurrentObjectController.ShowObject(
e.CurrentObject, e.ShowViewParameters, Application, Frame, View);
}
}

注意:在web中没这个问题,所以不用管。

XAF-如何改变列表点击时的默认行为的更多相关文章

  1. 去除input标签点击时的默认样式

    去除input标签点击时的默认样式的方法 outline:none; //去除点击时的边框 border : none; //去除input框的边框

  2. 修改Sharepoint 文档库列表点击Excel文件默认跳转到Excel Service服务 xlviewer.aspx页面

    在Sharepoint 文档库中,当点击库中的一个Excel文件时,Sharepoint默认为转跳到Excel Services上,无论是Sharepoint 的是否开启了Excel Service, ...

  3. 去掉input框点击时的默认颜色

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  4. vue点击时动态改变样式 ------- 最简单的方法

    vue点击时动态改变样式 template中 <li :class="{ active:index==isActive }" @click="changeValue ...

  5. XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo

    本主题介绍如何启用管理模型差异(XAFML),并将设置存储在数据库中.   名词解释: 1.模型:XAF中把所有应用程序的结构都用模型来定义,比如列表,有哪些列,名称是什么,对应的字段名是什么,业务对 ...

  6. 取消a标签在移动端点击时的背景颜色

    一.取消a标签在移动端点击时的蓝色 -webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-user-select: none; -m ...

  7. 改变MyEclipse创建JSP时默认的pageEncoding编码

    如何改变MyEclipse创建JSP时默认的pageEncoding编码 有时我们需要改变MyEclipse创建JSP时默认的pageEncoding编码,因为也许它默认的编码不是我们想要的,比如我们 ...

  8. IOS 开发之-- textfield和textview,return键的改变,点击return键

    IOS 开发之-- textfield和textview,return键的改变,点击return键 一,textfield的return键改变 方案1.改变键盘右下角的换行(enter)键为完成键,后 ...

  9. 取消a标签或者onclick在移动端点击时的背景颜色

    一.取消a标签在移动端点击时的蓝色 -webkit-tap-highlight-color: rgba(, , , ); -webkit-user-select: none; -moz-user-fo ...

随机推荐

  1. fpn

    class-aware detector 和 class-agnostic detector:https://blog.csdn.net/yeyang911/article/details/68484 ...

  2. expand_dims函数

    >>> x = np.array([1,2]) >>> x.shape (2,) >>> y = np.expand_dims(x, axis=0 ...

  3. Java8 Stream()关于在所有用户的所有上传记录中,找出每个用户最新上传记录

    原创文章:转载请标明出处 https://www.cnblogs.com/yunqing/p/9504196.html 首先分析相当于如下,在所有的猫中,每个名字的猫都保留年龄最小的一个 import ...

  4. ThinkPHP5入门(四)----模板篇

    一.模板访问 1.没有参数传递 $view = new View(); return $view->fetch(); 此时默认访问的模板路径为:[模板文件目录]/当前控制器名(小写+下划线)/当 ...

  5. 解决java log4j 配置log4jCaused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager

    前提安装http://mirror.bit.edu.cn/apache/logging/log4j/2.11.2/apache-log4j-2.11.2-bin.zip Buildpath 配置add ...

  6. JDK(五)JDK1.8源码分析【集合】HashMap

    本文转载自无始无终,原文连接 HashMap 在 JDK 1.8 后新增的红黑树结构 传统 HashMap 的缺点 JDK 1.8 以前 HashMap 的实现是 数组+链表,即使哈希函数取得再好,也 ...

  7. Project Euler:Problem 86 Cuboid route

    A spider, S, sits in one corner of a cuboid room, measuring 6 by 5 by 3, and a fly, F, sits in the o ...

  8. LeetCode40.组合总和|| JavaScript

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...

  9. 多线程系列之 java多线程的个人理解(二)

    前言:上一篇多线程系列之 java多线程的个人理解(一) 讲到了线程.进程.多线程的基本概念,以及多线程在java中的基本实现方式,本篇主要接着上一篇继续讲述多线程在实际项目中的应用以及遇到的诸多问题 ...

  10. c/s和b/s结构的区别

    c/s结构 1.创建Client 2.设计服务器Server 3.设计私有通讯协议 4.随着功能的升级,安装了客户端程序的计算,要不升级最新版 b/s结构 1.浏览器代替客户端 2.服务器(协议教会, ...