当前位置: 代码迷 >> C# >> WPF使用靠山C#代码创建Grid
  详细解决方案

WPF使用靠山C#代码创建Grid

热度:357   发布时间:2016-04-28 08:28:17.0
WPF使用后台C#代码创建Grid

笔者刚刚接触WPF,菜鸟一枚,在做一个练手程序时遇到这样一个需求,创建一个新的Grid并将其添加至一个ListView中,要求Grid及其子元素应按一定顺序给Name属性赋值,直接使用XAML创建的话重复代码过多,且新建一个Grid时名称重复,C#代码创建虽然代码量较大,但是很好的解决了这一问题,可以广泛应用,下面就贴出代码与诸位分享一下,代码质量不高,需要改进的地方还请诸位大神多多指教。

在函数外定义了一个变量Entries用于计数。使用数据绑定使得该Grid前几列与之前XAML中定义的标题宽度一致。

 1   public Grid  newgrid() 2         { 3             Grid grid = new Grid(); 4             grid.Name = "grid" + Entries.ToString(); 5  6             RowDefinition row1 = new RowDefinition();   //实例化一个Grid行 7             ColumnDefinition co1 = new ColumnDefinition();    //实例化一个Grid列 8             ColumnDefinition co2 = new ColumnDefinition();     9             ColumnDefinition co3 = new ColumnDefinition();    10             ColumnDefinition co4 = new ColumnDefinition();   11             ColumnDefinition co5 = new ColumnDefinition();   12             ColumnDefinition co6 = new ColumnDefinition();  13             ColumnDefinition co7 = new ColumnDefinition();   14             ColumnDefinition co8 = new ColumnDefinition();   15             //将前三列的宽度与在XAML中定义的标题宽度绑定16             Binding binding1 = new Binding();17             //设置绑定数据源对象18             binding1.ElementName = "titleco1";19             //设置源属性20             binding1.Path = new PropertyPath("Width");21             //进行数据绑定22             co1.SetBinding(ColumnDefinition.WidthProperty, binding1);23 24             Binding binding2 = new Binding();           25             binding2.ElementName = "titleco2";          26             binding2.Path = new PropertyPath("Width");          27             co2.SetBinding(ColumnDefinition.WidthProperty, binding2);28 29             Binding binding3 = new Binding();30             binding3.ElementName = "titleco3";31             //设置源属性32             binding3.Path = new PropertyPath("Width");33             //进行数据绑定34             co3.SetBinding(ColumnDefinition.WidthProperty, binding3);35             //将实例化的行和列添加到Grid中36             grid.RowDefinitions.Add(row1);37             grid.ColumnDefinitions.Add(co1);38             grid.ColumnDefinitions.Add(co2);39             grid.ColumnDefinitions.Add(co3);40             grid.ColumnDefinitions.Add(co4);41             grid.ColumnDefinitions.Add(co5);42             grid.ColumnDefinitions.Add(co6);43             grid.ColumnDefinitions.Add(co7);44             grid.ColumnDefinitions.Add(co8);45 46             //实例化需要的控件47             CheckBox ckbChose = new CheckBox();48             ckbChose.Name = "Chose" + Entries.ToString();49             TextBox txtNumber = new TextBox();50             txtNumber.Name = "number" + Entries.ToString();51             ComboBox cmbProcedure = new ComboBox();52             cmbProcedure.Name = "cmbProcedure" + Entries.ToString();53             TextBox txtCompletion = new TextBox();54             txtCompletion.Name = "Completion" + Entries.ToString();55             TextBox txtDuration = new TextBox();56             txtDuration.Name = "Duration" + Entries.ToString();57             TextBox txtStartTime = new TextBox();58             txtStartTime.Name = "StartTime" + Entries.ToString();59             TextBox txtPredecessor = new TextBox();60             txtPredecessor.Name = "Predecessor" + Entries.ToString();61             TextBox txtResource = new TextBox();62             txtResource.Name = "Resource" + Entries.ToString();63             //将前面实例化的元素添加至Grid64             grid.Children.Add(ckbChose);65             grid.Children.Add(txtNumber);66             grid.Children.Add(cmbProcedure);67             grid.Children.Add(txtCompletion);68             grid.Children.Add(txtDuration);69             grid.Children.Add(txtStartTime);70             grid.Children.Add(txtPredecessor);71             grid.Children.Add(txtResource);72             //添加后全部是堆积在第一行第一列,下面是对其进行排序73             Grid.SetColumn(ckbChose, 0);74             Grid.SetColumn(txtNumber, 1);75             Grid.SetColumn(cmbProcedure, 2);76             Grid.SetColumn(txtCompletion, 3);77             Grid.SetColumn(txtDuration, 4);78             Grid.SetColumn(txtStartTime, 5);79             Grid.SetColumn(txtPredecessor, 6);80             Grid.SetColumn(txtResource, 7);81             return grid;82         }

 

2楼董小保
我想知道这个在什么情况下回用到在后台去创建xaml 的格式?,既然用到了wpf不就意味着使用mvvm的类似结构了吗?,求教使用情况说明
Re: 依然传奇
@董小保,刚接触WPF,MVVM还没用过,谢谢提醒,后面学习一下~
1楼vbfool
关键是需求没看懂,一个Grid放进ListView里,不是应该在ListView里加一列么?
Re: 依然传奇
@vbfool,加一列的话格式不整齐,但这样确实有问题,今天和老师交流的时候也给我提了这样的意见,后面会改正的
  相关解决方案