【C#】 如何通过泛型构建对象+如何后台添加控件
如何通过泛型构建对象
private T CreatHcText<T>(string title) where T : FrameworkElement
{
T obj = (T)Activator.CreateInstance(typeof(T));
HandyControl.Controls.TitleElement.SetTitlePlacement(obj, HandyControl.Data.TitlePlacementType.Left);
HandyControl.Controls.TitleElement.SetTitle(obj, title);
obj.Margin = new Thickness(5);
return obj;
}
首先我们通过typeof(T)拿到泛型的类型,然后同Activator.CreateInstance构造对象,最后通过强制转换转换成泛型对应的类型。
后台添加HandyControl控件
这边有个需求,需要根据http返回的内容动态添加控件,而且控件类型也要更具返回的内容指定。
也是动态生成不同的类型,这样的话数据模板也不好使了,只好后台动态添加了。
因为,控件类型不定,所以这里用到了泛型。
HandyControl 的控件可以通过附加属性设置标题,这样可以减轻布局的复杂性。
所以就有了如上代码:
HandyControl.Controls.TitleElement.SetTitle(obj, title); //附加属性的添加
最后是调用的过程
foreach (var item in _data_model.result.titleColumn)
{
switch (item.columnType)
{
case BaseLibrary.MyEnum.ControlType.input:
stackPanel.Children.Add(CreatHcText<HandyControl.Controls.TextBox>(item.columnChName));
break;
case BaseLibrary.MyEnum.ControlType.date:
var t = CreatHcText<HandyControl.Controls.TextBox>(item.columnChName);
t.Text = DateTime.Now.ToString("yyyy-MM-dd");
stackPanel.Children.Add(t);
break;
case BaseLibrary.MyEnum.ControlType.select:
var s = CreatHcText<HandyControl.Controls.ComboBox>(item.columnChName);
s.ItemsSource = item.selectValue;
stackPanel.Children.Add(s);
break;
case BaseLibrary.MyEnum.ControlType.judge:
break;
default:
break;
}
}
作者:宋桓公
出处:http://www.cnblogs.com/douzi2/
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。