原創|其它|編輯:郝浩|2013-01-28 14:33:26.000|閱讀 2939 次
概述:要想完成簡單易用的用戶界面,可見的UI控件當然不可少,但是制表符,彈出窗口等非界面上可見的控件也是非常重要的。今天我們就來談談不需要任何用戶交互的控件——工具提示的應用。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
要想完成簡單易用的用戶界面,可見的UI控件當然不可少,但是制表符,彈出窗口等非界面上可見的控件也是非常重要的。今天我們就來談談不需要任何用戶交互的控件——工具提示的應用。DevExpress Universal Suite即使在windows平臺下,也支持HTML格式的工具提示。接下來我們就以這個DEMO為實例,討論一下如何創建工具提示。
如何讓任意業務對象的數據屬性都擁有工具提示,首先需要創建一個接口和擴展我們的應用模型列。
[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項目中重復使用該功能是非常容易的,設置都不需要任何代碼便能完成。
接下來,我們討論一下,一個復雜的高級帶狀的ListView,要如何引導最終用戶雙擊的行區域看到更多的記錄?同樣的,首先也需要擴展應用模型。
public interface IModelTooltipData : IModelNode {
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
string ToolTipText { get; set; }
// ...
接下來在模型編輯器中為文本指定ToolTipText屬性,剩下的就與XAF完成了。

將一個類(如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列:

然后XAF就會彈出一個html格式的工具提示了,如下圖所示:

類似的PivotGridListEditors也可以實現這個效果:

標簽:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉載自:慧都控件網