打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
DevExpress ToolTip示例
DXperience Universal Suite即使在windows平台下,也支持HTML格式的工具提示。接下来我们就以XVideoRental这个DEMO为实例,讨论一下如何创建工具提示。

DataOnToolTip

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[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>();
    }

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

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

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

ToolTipText

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

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

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

ToolTipController

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

1
2
3
4
5
6
7
public interface IModelTooltipData : IModelNode {
    [DataSourceProperty("ToolTipControllers")]
    [TypeConverter(typeof(StringToTypeConverterBase))]
    Type ToolTipController { get; set; }
  
    [Browsable(false)]
    IEnumerable<Type> ToolTipControllers { get; }

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

1
2
3
4
5
6
7
8
9
10
11
[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了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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列:

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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SharpDevelop浅析_4_TextEditor_自动完成、代码折叠…… Parser及其应用: Code Completion, Method Insight, Class Scout ...
[示例] Firemonkey ListView 仿 iPhone X 浏海
平衡式构图
如何让listview滚动到底部
A Sortable GridView (I mean ListView) Control in WPF
怎样画兰
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服