WPF使用后台C#代码创建Grid
笔者刚刚接触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的更多相关文章
- WPF中用后台C#代码为TabItem设置Background属性
TabItem tabItem = sender as TabItem; tabItem.Background = new ImageBrush(new BitmapImage(new Uri(@&q ...
- WPF/WP/Silverlight/Metro App代码创建动画的思路
在2010年之前,我都是用Blend创建动画,添加触发器实现自动动画,后来写成代码创建的方式.如今Blend已经集成到Visual Studio安装镜像中了,最新的VS2015安装,Blend的操作界 ...
- 【WPF学习】第五十七章 使用代码创建故事板
在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...
- [WPF]如何使用代码创建DataTemplate(或者ControlTemplate)
1. 前言 上一篇文章([UWP]如何使用代码创建DataTemplate(或者ControlTemplate))介绍了在UWP上的情况,这篇文章再稍微介绍在WPF上如何实现. 2. 使用Framew ...
- WPF入门教程系列(一) 创建你的第一个WPF项目
WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...
- WPF换肤之八:创建3D浏览效果
原文:WPF换肤之八:创建3D浏览效果 上节中,我们展示了WPF中的异步以及界面线程交互的方式,使得应用程序的显示更加的流畅.这节我们主要讲解如何设计一个具有3D浏览效果的天气信息浏览器. 效果显示 ...
- WPF点滴(2) 创建单实例应用程序
最近有同事问道在应用程序启动之后,再次双击应用程序,如何保证不再启动新的应用程序,而是弹出之前已经启动的进程,本质上这就是创建一个单实例的WPF应用程序.在VS的工程树中有一个App.xaml和App ...
- 【Android】纯代码创建页面布局(含异步加载图片)
开发环境:macOS 10.12 + Android Studio 2.2,MinSDK Android 5.1 先看看总体效果 本示例是基于Fragment进行的,直接上代码: [界面结构] 在 F ...
- django在admin后台注册自己创建的数据库表
django在admin后台注册自己创建的数据库表,这样我们就可以在admin后台看到表结构信息,我们就可以在admin后台快速录入表记录信息 如果没有注册,那么你在登录django自带的admin的 ...
随机推荐
- 20个优秀的 JavaScript 键盘事件处理库
键盘事件是 Web 开发中最常用的事件之一,通过对键盘事件的捕获和处理可以提高网站的易用性和交互体验.下面,我们向大家介绍收集的20款优秀的 JavaScript 键盘事件处理库,帮助开发人员轻松处理 ...
- pywebsocket的搭建
Python可以搭建pywebsocket(Web服务器,python websocket),搭建pywebsocket必须要已经安装了python,点我查看python的下载与安装.在这篇Blog中 ...
- jquery取消事件冒泡的三种方法(推荐)
1.通过返回false来取消默认的行为并阻止事件起泡. jQuery 代码: ? 1 2 3 4 5 6 7 8 9 10 11 $("form").bind( "s ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q69-Q71)
Question 69 You are designing an extranet site using SharePoint 2010. This site must allow employees ...
- android编译系统的makefile文件Android.mk写法
Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件.由于一般情况下Android.mk和需要编译的源文件在同一目录下,宏函数“my-dir”右编译系统提供的,用于返回当前路径 ...
- XMPP框架的分析、导入及问题解决
上一篇讲了 XMPP调试与简单使用 ,本篇开始讲如何使用将XMPPFramework框架导入到项目中! 先来了解以下XMPPFramework都放了些什么: Authentication: 与登陆相关 ...
- kubernetes听云实战发布版
➠更多技术干货请戳:听云博客 听云线上使用k8s已经有一段时间了,下面对一些听云使用过程中的问题进行一些梳理,包括架构设计,安装部署和后期维护. 目录结构如下: 下面进入正题: 我们以听云系统的一个报 ...
- 干货之运用CALayer创建星级评分组件(五角星)
本篇记录星级评分组件的创建过程以及CALayer的运用. 为了实现一个星级评分的组件,使用了CALayer,涉及到mask.CGPathRef.UIBezierPath.动画和一个计算多角星关键节点的 ...
- 不用画线 设置UITableView的全屏分隔线
如图 添加如下代码 sTableView.separatorInset = UIEdgeInsetsZero; sTableView.layoutMargins = UIEdgeInsetsZero ...
- iOS 中内存分配与分区
关于RAM ROM RAM与ROM就是具体的存储空间,统称为存储器 RAM(random access memory):运行内存,CPU可以直接访问,读写速度非常快,但是不能掉电存储.它又分为: 动态 ...