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

在函数外定义了一个变量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, );
Grid.SetColumn(txtNumber, );
Grid.SetColumn(cmbProcedure, );
Grid.SetColumn(txtCompletion, );
Grid.SetColumn(txtDuration, );
Grid.SetColumn(txtStartTime, );
Grid.SetColumn(txtPredecessor, );
Grid.SetColumn(txtResource, );
return grid;
}

WPF使用后台C#代码创建Grid的更多相关文章

  1. WPF中用后台C#代码为TabItem设置Background属性

    TabItem tabItem = sender as TabItem; tabItem.Background = new ImageBrush(new BitmapImage(new Uri(@&q ...

  2. WPF/WP/Silverlight/Metro App代码创建动画的思路

    在2010年之前,我都是用Blend创建动画,添加触发器实现自动动画,后来写成代码创建的方式.如今Blend已经集成到Visual Studio安装镜像中了,最新的VS2015安装,Blend的操作界 ...

  3. 【WPF学习】第五十七章 使用代码创建故事板

    在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...

  4. [WPF]如何使用代码创建DataTemplate(或者ControlTemplate)

    1. 前言 上一篇文章([UWP]如何使用代码创建DataTemplate(或者ControlTemplate))介绍了在UWP上的情况,这篇文章再稍微介绍在WPF上如何实现. 2. 使用Framew ...

  5. WPF入门教程系列(一) 创建你的第一个WPF项目

    WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...

  6. WPF换肤之八:创建3D浏览效果

    原文:WPF换肤之八:创建3D浏览效果 上节中,我们展示了WPF中的异步以及界面线程交互的方式,使得应用程序的显示更加的流畅.这节我们主要讲解如何设计一个具有3D浏览效果的天气信息浏览器. 效果显示 ...

  7. WPF点滴(2) 创建单实例应用程序

    最近有同事问道在应用程序启动之后,再次双击应用程序,如何保证不再启动新的应用程序,而是弹出之前已经启动的进程,本质上这就是创建一个单实例的WPF应用程序.在VS的工程树中有一个App.xaml和App ...

  8. 【Android】纯代码创建页面布局(含异步加载图片)

    开发环境:macOS 10.12 + Android Studio 2.2,MinSDK Android 5.1 先看看总体效果 本示例是基于Fragment进行的,直接上代码: [界面结构] 在 F ...

  9. django在admin后台注册自己创建的数据库表

    django在admin后台注册自己创建的数据库表,这样我们就可以在admin后台看到表结构信息,我们就可以在admin后台快速录入表记录信息 如果没有注册,那么你在登录django自带的admin的 ...

随机推荐

  1. Ideal Forms – 帮助你建立响应式 HTML5 表单

    Ideal Forms 是建立和验证响应式 HTML5 表单的终极框架.它刚刚发布 V3 版本,更小,更快,更具可扩展性.它支持实时验证,完全自适应(适应容器,没有 CSS 媒体查询需要),键盘支持, ...

  2. 13个风格独特的关于页面(About Pages)设计

    如何向其他人呈现你自己和你的作品呢?关于页面的设计是非常重要的,以让你的观众更多地了解你,你的工作和你的想法.这是一个很好的方式来获得更加个性化的展示效果. 设计一个漂亮的关于页面是具有挑战性的.出于 ...

  3. [js开源组件开发]数字或金额千分位格式化组件

    数字或金额千分位格式化组件 这次距离上一个组件<[js开源组件开发]table表格组件>时隔了一个月,由于最近的项目比较坑,刚挖完坑,所以来总结性提出来几个组件弥补这次的空缺,首先是金额和 ...

  4. SharePoint 2013 同步FBA认证用户

    SharePoint 开启了基于FBA的身份认证,经常会遇到用户组用户的问题,当我加入一个AD账号,无法同时加入Form认证的用户,这时,只能手动添加,比较麻烦:所以,写了一个服务,用来每天晚上同步一 ...

  5. iOS---去除url中的反斜扛

    //  NSString * str =  [url  stringByReplacingOccurrencesOfString:@"\\/" withString:@" ...

  6. 【代码笔记】iOS-浮动的云

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  7. Mysql查询按照某字段指定顺序排序

    在项目当中用到Sphinx的时候,很多人遇到了这样的问题:使用mysql+Sphinx检索出了相关度的ID后,如何按照指定ID在Mysql中进行排序呢?这里是我在项目中的解决方法: 1 SELECT ...

  8. CMPP3.0实现物联网卡通讯

    当下物联网发展迅猛,物联网卡可以接受短信指令,实现千里之外尽可掌控.本人做过一个这类项目,把相关经验记录下来,分享给需要的人. 物联网卡通讯其实跟电话卡一样,可以使用CMPP协议.不过由于物联网卡位数 ...

  9. linux pstack命令总结

    pstack命令用来显示进程的栈跟踪. pstack 命令必须由相应进程的属主或root账号运行.可以使用pstack来确定进程挂起的位置.此命令只有一个参数,那就是pid,具体关于pstack的介绍 ...

  10. Javascript之旅——第十一站:原型也不好理解?

    写到这篇,我的js系列也快接近尾声了,所以这个系列不会遗留js来实现面向对象的核心——原型,有些人说原型不好理解,其实嘛,要想系统 的理解原型,最便捷的方式就是看看经典的书,少看些博客,博客这东西只是 ...