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