WPF使用后台C#代码创建Grid
2015-12-02 22:28
429 查看
笔者刚刚接触WPF,菜鸟一枚,在做一个练手程序时遇到这样一个需求,创建一个新的Grid并将其添加至一个ListView中,要求Grid及其子元素应按一定顺序给Name属性赋值,直接使用XAML创建的话重复代码过多,且新建一个Grid时名称重复,C#代码创建虽然代码量较大,但是很好的解决了这一问题,可以广泛应用,下面就贴出代码与诸位分享一下,代码质量不高,需要改进的地方还请诸位大神多多指教。
在函数外定义了一个变量Entries用于计数。使用数据绑定使得该Grid前几列与之前XAML中定义的标题宽度一致。
在函数外定义了一个变量Entries用于计数。使用数据绑定使得该Grid前几列与之前XAML中定义的标题宽度一致。
public Grid newgrid() { Grid grid = new Grid(); grid.Name = "grid" + Entries.ToString(); RowDefinition row1 = new RowDefinition(); //实例化一个Grid行 ColumnDefinition co1 = new ColumnDefinition(); //实例化一个Grid列 ColumnDefinition co2 = new ColumnDefinition(); ColumnDefinition co3 = new ColumnDefinition(); ColumnDefinition co4 = new ColumnDefinition(); ColumnDefinition co5 = new ColumnDefinition(); ColumnDefinition co6 = new ColumnDefinition(); ColumnDefinition co7 = new ColumnDefinition(); ColumnDefinition co8 = new ColumnDefinition(); //将前三列的宽度与在XAML中定义的标题宽度绑定 Binding binding1 = new Binding(); //设置绑定数据源对象 binding1.ElementName = "titleco1"; //设置源属性 binding1.Path = new PropertyPath("Width"); //进行数据绑定 co1.SetBinding(ColumnDefinition.WidthProperty, binding1); Binding binding2 = new Binding(); binding2.ElementName = "titleco2"; binding2.Path = new PropertyPath("Width"); co2.SetBinding(ColumnDefinition.WidthProperty, binding2); Binding binding3 = new Binding(); binding3.ElementName = "titleco3"; //设置源属性 binding3.Path = new PropertyPath("Width"); //进行数据绑定 co3.SetBinding(ColumnDefinition.WidthProperty, binding3); //将实例化的行和列添加到Grid中 grid.RowDefinitions.Add(row1); grid.ColumnDefinitions.Add(co1); grid.ColumnDefinitions.Add(co2); grid.ColumnDefinitions.Add(co3); grid.ColumnDefinitions.Add(co4); grid.ColumnDefinitions.Add(co5); grid.ColumnDefinitions.Add(co6); grid.ColumnDefinitions.Add(co7); grid.ColumnDefinitions.Add(co8); //实例化需要的控件 CheckBox ckbChose = new CheckBox(); ckbChose.Name = "Chose" + Entries.ToString(); TextBox txtNumber = new TextBox(); txtNumber.Name = "number" + Entries.ToString(); ComboBox cmbProcedure = new ComboBox(); cmbProcedure.Name = "cmbProcedure" + Entries.ToString(); TextBox txtCompletion = new TextBox(); txtCompletion.Name = "Completion" + Entries.ToString(); TextBox txtDuration = new TextBox(); txtDuration.Name = "Duration" + Entries.ToString(); TextBox txtStartTime = new TextBox(); txtStartTime.Name = "StartTime" + Entries.ToString(); TextBox txtPredecessor = new TextBox(); txtPredecessor.Name = "Predecessor" + Entries.ToString(); TextBox txtResource = new TextBox(); txtResource.Name = "Resource" + Entries.ToString(); //将前面实例化的元素添加至Grid grid.Children.Add(ckbChose); grid.Children.Add(txtNumber); grid.Children.Add(cmbProcedure); grid.Children.Add(txtCompletion); grid.Children.Add(txtDuration); grid.Children.Add(txtStartTime); grid.Children.Add(txtPredecessor); grid.Children.Add(txtResource); //添加后全部是堆积在第一行第一列,下面是对其进行排序 Grid.SetColumn(ckbChose, 0); Grid.SetColumn(txtNumber, 1); Grid.SetColumn(cmbProcedure, 2); Grid.SetColumn(txtCompletion, 3); Grid.SetColumn(txtDuration, 4); Grid.SetColumn(txtStartTime, 5); Grid.SetColumn(txtPredecessor, 6); Grid.SetColumn(txtResource, 7); return grid; }
相关文章推荐
- 详解C#中的反射(转载)
- C#跟踪日志
- C#之Action的实际应用例子
- c#委托
- C# yield return 用法与解析
- C#基础知识总结之二
- C#操作 Access 2013(.accdb)的方法
- C#中的动态特性
- 发发牢骚,觉得走c#这条路,不该太浮躁。
- C#:解决WCF中服务引用 自动生成代码不全的问题。
- C#中静态与非静态方法比较
- c#托管与非托管
- c# Eval函数中将日期显示的格式修改为yyyy-MM-dd形式
- c#Lamdba表达式与委托
- C#异步编程参考
- c#获取客户端IP
- c#项目遇到的问题及解决(2)
- C#实现Discuz登录程序
- c# 短链接生成
- C#读取Word文档内容代码