开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 4990|回复: 1

DevExpress工具提示实例应用详解

[复制链接]

0

精华

0

贡献

6

赞扬

帖子
31
软币
206
在线时间
9 小时
注册时间
2015-9-24
发表于 2015-9-29 15:16:10 | 显示全部楼层 |阅读模式

要想完成简单易用的用户界面,可见的UI控件当然不可少,但是制表符,弹出窗口等非界面上可见的控件也是非常重要的。今天我们就来谈谈不需要任何用户交互的控件——工具提示应用DevExpress Universal Suite即使在windows平台下,也支持HTML格式的工具提示。接下来我们就以XVideoRental这个DEMO为实例,讨论一下如何创建工具提示。

DataOnToolTip

  如何让任意业务对象的数据属性都拥有工具提示,首先需要创建一个接口和扩展我们的应用模型列。

[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em][size=1em][ModelAbstractClass]
[size=1em]public interface IModelColumnTooltipData : IModelColumn {
[size=1em]    IModelTooltipData TooltipData { get; }
[size=1em]}
[size=1em]public interface IModelTooltipData : IModelNode {
[size=1em]    [Category("DataOnToolTip")]
[size=1em]    bool DataOnToolTip { get; set; }
[size=1em]    [Category("DataOnToolTip")]
[size=1em]    int MaxHeight { get; set; }
[size=1em]    [Category("DataOnToolTip")]
[size=1em]    int MaxWidth { get; set; }
[size=1em]}
[size=1em]  
[size=1em]public class GridViewImageTextToolTipController : ViewController<ListView>, IModelExtender {
[size=1em]    public void ExtendModelInterfaces(ModelInterfaceExtenders extenders) {
[size=1em]        extenders.Add<IModelColumn, IModelColumnTooltipData>();
[size=1em]    }



  以上代码即可完成扩展应用模型,如下图所示:

  接下来设置DataOnTooltip的属性,让他能展示数据。

  由于XAF的MVC架构,在任何XAF项目中重复使用该功能是非常容易的,设置都不需要任何代码便能完成。

ToolTipText

  接下来,我们讨论一下,一个复杂的高级带状的ListView,要如何引导最终用户双击的行区域看到更多的记录?同样的,首先也需要扩展应用模型。

[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em][size=1em]public interface IModelTooltipData : IModelNode {
[size=1em]        [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
[size=1em]        string ToolTipText { get; set; }
[size=1em]//        ...



  接下来在模型编辑器中为文本指定ToolTipText属性,剩下的就与XAF完成了。

ToolTipController

  将一个类(如Controller)关联到节点,其实在扩展应用程序模型很容易做到。在这个示例中,我们首先要为ModelToolTipData添加属性。

[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em][size=1em]public interface IModelTooltipData : IModelNode {
[size=1em]    [DataSourceProperty("ToolTipControllers")]
[size=1em]    [TypeConverter(typeof(StringToTypeConverterBase))]
[size=1em]    Type ToolTipController { get; set; }
[size=1em]  
[size=1em]    [Browsable(false)]
[size=1em]    IEnumerable<Type> ToolTipControllers { get; }



  下面是一个不可阅览ToolTipControllers的域逻辑的示例。

[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em][size=1em][DomainLogic(typeof(IModelTooltipData))]
[size=1em]public class IModelToolTipControllerDomainLogic  {
[size=1em]    public static IEnumerable<Type> Get_ToolTipControllers(IModelToolTipController modelToolTipController) {
[size=1em]        return FindTypeDescenants(typeof(ObjectToolTipController));
[size=1em]    }
[size=1em]    protected static IEnumerable<Type> FindTypeDescenants(Type type) {
[size=1em]        var typeInfo = XafTypesInfo.Instance.FindTypeInfo(type);
[size=1em]        return ReflectionHelper.FindTypeDescendants(typeInfo).Where(info => !info.IsAbstract).Select(info => info.Type);
[size=1em]    }
[size=1em]  
[size=1em]}



  接下来就是为业务对象应用这个Controller了。

[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em][size=1em]public class MovieToolTipController : ObjectToolTipController {
[size=1em]    const int MaxPhotoWidth = 120, MaxPhotoHeight = 120;
[size=1em]    public MovieToolTipController(Control parent) : base(parent) { }
[size=1em]  
[size=1em]    protected override void InitToolTipItem(ToolTipItem item) {
[size=1em]        var movie = ObjectSpace.FindObject<Movie>(CriteriaOperator.Parse("MovieTitle=?", EditObject));
[size=1em]        var photo = movie.Photo;
[size=1em]        if (photo != null)
[size=1em]            item.Image = photo.CreateImage(MaxPhotoWidth, MaxPhotoHeight);
[size=1em]        item.Text = GetMovieInfoHtml(movie);
[size=1em]    }
[size=1em]    public string GetMovieInfoHtml(Movie movie) {
[size=1em]        return string.Format("<b>{0}</b>\r\n<i>{2:D}</i>\r\r\n{1}", movie.Title, movie.Plot, movie.ReleaseDate);
[size=1em]    }
[size=1em]  
[size=1em]}



  然后将它分配给一个ListView列:

  然后XAF就会弹出一个html格式的工具提示了,如下图所示:

  类似的PivotGridListEditors也可以实现这个效果:

更多在线资源


评分

参与人数 1赞扬 +1 收起 理由
码农007 + 1 很给力

查看全部评分

回复

使用道具 举报

0

精华

130

贡献

74

赞扬

帖子
106
软币
266
在线时间
16 小时
注册时间
2015-10-16
发表于 2015-10-28 10:40:21 | 显示全部楼层
不错,学习了
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-23 03:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表