彩票走势图

DevExpress工具提示实例应用详解

原创|其它|编辑:郝浩|2013-01-28 14:33:26.000|阅读 2858 次

概述:要想完成简单易用的用户界面,可见的UI控件当然不可少,但是制表符,弹出窗口等非界面上可见的控件也是非常重要的。今天我们就来谈谈不需要任何用户交互的控件——工具提示的应用。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

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

DataOnToolTip

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

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

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

DevExpress工具提示实例应用详解

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

DevExpress工具提示实例应用详解

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

ToolTipText

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

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

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

DevExpress工具提示实例应用详解

ToolTipController

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

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

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

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

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

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

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

DevExpress工具提示实例应用详解

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

DevExpress工具提示实例应用详解

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

DevExpress工具提示实例应用详解




标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:慧都控件网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP