商信互联
本主题描述如何为WinForms应用程序自定义内置XAF属性编辑器(请参阅“如何:自定义内置属性编辑器(ASP.NET)”主题以查看类似的ASP.NET示例)。在此示例中,DatePropertyEditor被定制为显示日历和时钟:
您可以在XAF随附的Feature Center Demo中看到此处演示的代码,以及有关自定义属性编辑器的更多示例。默认情况下,Feature Center演示安装在%PUBLIC%\ Documents \ DevExpress演示19.2 \ Components \ eXpressApp Framework \ FeatureCenter中。该演示的ASP.NET版本可从http://demos.devexpress.com/XAF/FeatureCenter/在线获得。
在WinForms模块项目中,继承DatePropertyEditor类。请注意,您的编辑器应该是公开的。由于此类是DXPropertyEditor类的后代,因此可以使用“存储库项目”访问其设置。要将自定义应用于在“详细信息视图”和“列表视图”中创建的控件,请重写SetupRepositoryItem方法。的属性编辑属性被应用到实现属性编辑器,以指定可用于日期时间 类型的属性:
using DevExpress.Utils;
using DevExpress.XtraEditors.Repository;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.Win.Editors;
//...
[PropertyEditor(typeof(DateTime), false)]
public class CustomDateTimeEditor : DatePropertyEditor {
public CustomDateTimeEditor(Type objectType, IModelMemberViewItem info) :
base(objectType, info) { }
protected override void SetupRepositoryItem(RepositoryItem item) {
base.SetupRepositoryItem(item);
RepositoryItemDateTimeEdit dateProperties = (RepositoryItemDateTimeEdit)item;
dateProperties.CalendarTimeEditing = DefaultBoolean.True;
dateProperties.CalendarView = CalendarView.Vista;
}
}
Imports DevExpress.Utils
Imports DevExpress.XtraEditors.Repository
Imports DevExpress.ExpressApp.Editors
Imports DevExpress.ExpressApp.Model
Imports DevExpress.ExpressApp.Win.Editors
'...
<PropertyEditor(GetType(Date), False)> _
Public Class CustomDateTimeEditor
Inherits DatePropertyEditor
Public Sub New(ByVal objectType As Type, ByVal info As IModelMemberViewItem)
MyBase.New(objectType, info)
End Sub
Protected Overrides Sub SetupRepositoryItem(ByVal item As RepositoryItem)
MyBase.SetupRepositoryItem(item)
Dim dateProperties As RepositoryItemDateTimeEdit = CType(item, RepositoryItemDateTimeEdit)
dateProperties.CalendarTimeEditing = DefaultBoolean.True
dateProperties.CalendarView = CalendarView.Vista
End Sub
End Class
要将实现的属性编辑器用于特定属性,请在WinForms项目中运行模型编辑器,并将所需OwnMember或ViewItem节点的IModelCommonMemberViewItem.PropertyEditorType设置为CustomDateTimeEditor。
要将实现的属性编辑器用于所有DateTime属性,请在上面的代码中将PropertyEditorAttribute构造函数的defaultEditor参数设置为true。该CompositeView.GetItems <T>方法,可以使用自定义属性编辑器的所有属性,而不是默认的属性编辑器。
请注意,应格式化与创建的属性编辑器关联的业务类的属性值,以显示DateTime值的时间部分
using DevExpress.ExpressApp.Model;
//...
[ModelDefault("DisplayFormat", "{0:MM.dd.yyyy hh:mm:ss}")]
[ModelDefault("EditMask", "MM.dd.yyyy hh:mm:ss")]
public DateTime CreatedOn { get; set;}
Imports DevExpress.ExpressApp.Model
'...
<ModelDefault("DisplayFormat", "{0:MM.dd.yyyy hh:mm:ss}"), _
ModelDefault("EditMask", "MM.dd.yyyy hh:mm:ss")> _
Public Property CreatedOn() As Date
有关详细信息,请参阅格式化属性值主题。