原創(chuàng)|其它|編輯:郝浩|2013-01-28 14:33:26.000|閱讀 2928 次
概述:要想完成簡單易用的用戶界面,可見的UI控件當然不可少,但是制表符,彈出窗口等非界面上可見的控件也是非常重要的。今天我們就來談談不需要任何用戶交互的控件——工具提示的應用。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
要想完成簡單易用的用戶界面,可見的UI控件當然不可少,但是制表符,彈出窗口等非界面上可見的控件也是非常重要的。今天我們就來談談不需要任何用戶交互的控件——工具提示的應用。DevExpress Universal Suite即使在windows平臺下,也支持HTML格式的工具提示。接下來我們就以這個DEMO為實例,討論一下如何創(chuàng)建工具提示。
如何讓任意業(yè)務對象的數(shù)據(jù)屬性都擁有工具提示,首先需要創(chuàng)建一個接口和擴展我們的應用模型列。
[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的屬性,讓他能展示數(shù)據(jù)。
由于XAF的MVC架構(gòu),在任何XAF項目中重復使用該功能是非常容易的,設置都不需要任何代碼便能完成。
接下來,我們討論一下,一個復雜的高級帶狀的ListView,要如何引導最終用戶雙擊的行區(qū)域看到更多的記錄?同樣的,首先也需要擴展應用模型。
public interface IModelTooltipData : IModelNode { [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))] string ToolTipText { get; set; } // ...
接下來在模型編輯器中為文本指定ToolTipText屬性,剩下的就與XAF完成了。
將一個類(如Controller)關聯(lián)到節(jié)點,其實在擴展應用程序模型很容易做到。在這個示例中,我們首先要為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); } }
接下來就是為業(yè)務對象應用這個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列:
然后XAF就會彈出一個html格式的工具提示了,如下圖所示:
類似的PivotGridListEditors也可以實現(xiàn)這個效果:
標簽:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)