笔者刚刚接触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. tmtTable设计说明文档

    文件链接:tmt-table.js BOSS后台项目用到最多的就是列表页,所以把列表页做成通用组件,可以大大提高开发效率. 因为列表可能有不同的样式,所以在实例化组件时可以传值控制样式,用这种方式: ...

  2. javascript --- 事件冒泡与事件捕获

    事件冒泡与事件捕获 事件冒泡和事件捕获分别由微软和网景公司提出,这两个概念都是为了解决页面中事件流(事件发生顺序)的问题.考虑下面这段代码,就不写html->head,body之类的代码了,自行 ...

  3. C#添加dll引用后,添加命名空间出错的解决方案

    原因:类库dll的目标框架与项目的目标框架不一致造成的,右键单击项目project--〉属性 ---〉Application选项卡下有“目标框架”Target Framewiork,  遇到的是类库的 ...

  4. 将PostGIS转化为GeoJSON

    #!/usr/bin/env python # -*- coding: utf-8 -*- import psycopg2 import json from geojson import loads, ...

  5. Swift获取屏幕快照

    // 获取屏幕快照 private func screenShot() -> UIImage{ let window = UIApplication.shared.keyWindow! UIGr ...

  6. Android之滑屏动画和自定义控件

    滑屏动画 在Android系统中,通过手势识别切换界面时,通常会在界面切换时加入动画,以提高用户的体验效果,这种动画一般都采用平移动画,下一个界面进入时,上一个界面移除屏幕. 图中标识的均为左上角坐标 ...

  7. 查看Android系统给APP分配的最大堆栈

    命令方式: cat /system/build.prop dalvik.vm.heapgrowthlimit=48m dalvik.vm.heapsize=128m 代码方式: Runtime rt= ...

  8. C语言ASCII码、运算符优先级、转义字符

  9. php鼠标滚动加载

    http://www.thinkphp.cn/extend/772.html 滚动距离js判断 i = 1; //设置当前页数 $(function() { var totalpage = 6; // ...

  10. python urllib2 发起http请求post

    使用urllib2发起post请求 def GetCsspToken(): data = json.dumps({"userName":"wenbin", &q ...