笔者刚刚接触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. 【HTML5】Canvas图像

    把一幅图像放置到画布上, 使用以下方法: drawImage(Img,x,y); 注:这里的Img必须是一个图像对象.   显示一个canvas图像: <!DOCTYPE html> &l ...

  2. [deviceone开发]-天气demo

    一.简介 该demo主要实现定位功能,读取天气信息,语音播报功能.其中定位需要配置key,调试二维码请到论坛中下载! 二.效果图 三.相关讨论 http://bbs.deviceone.net/for ...

  3. 【Leafletjs】4.L.Map 中文API

    L.Map API各种类中的核心部分,用来在页面中创建地图并操纵地图. 使用 example // initialize the map on the "map" div with ...

  4. iOS本地推送与远程推送

    原文在此 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程 ...

  5. OC 内存泄露 自动释放池

    花絮:看到下面的代码就想起这么一个调侃: 一个老程序员,功成名就,金盆洗手不在写代码后,决定练练书法.提笔思索良久后在纸上写下:Hello world! /********************** ...

  6. Android 中BaseActivty

    Base接口 IBaseActivity package liu.basedemo.base; /** * 基类接口 * Created by 刘楠 on 2016/7/28 0028.23:05 * ...

  7. java反射机制一个例子

    import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) { try ...

  8. iOS 简单动画 序列帧动画

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ NSLog(@"旭宝爱吃 ...

  9. IntelliJ IDEA 导入新项目以后的简单配置

    首先,配置Maven. 然后,配置Git. 选择自己调试要用的默认浏览器. 进行Edit Configurations 配置: 转载请注明出处! http://www.cnblogs.com/libi ...

  10. Windows操作系统优化(Windows优化大师版) - 进阶者系列 - 学习者系列文章

    Windows优化大师是一款不错的优化软件.笔者以前在使用XP的时候就使用该软件进行优化.下面就简要的介绍该软件优化的过程. 1.  下载该软件. http://dl.youhua.com/youhu ...