WPF编游戏系列 之四 用户控件
在上一篇《WPF编游戏系列 之三 物品清单》中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2.2中使用的C#代码过多,其实我在写这些代码时也有同感,的确很繁琐也不好维护。其实这组控件的结构就是:<StackPanel><Image><Textblock><Textblock><Image>这5个控件的组合,那么能否将其做成一个控件组呢?“用户控件”即可实现这个功能。
1. 创建一个用户控件,右键项目名称,Add->New Item,选择User Control,新建一个GoodsElement控件。
VS会在Solution Explorer中创建一个新的XAML文件。
2. 控件创建好,就要对它进行编辑了,打开GoodsElement.xaml,将之前重复使用的控件全部定义到这里。
<UserControl x:Class="XMarket.GoodsElement"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Height="195" Width="150"><Grid><Border BorderThickness="3" CornerRadius ="5"Background="#FFFFCC" BorderBrush="#FF6633"><StackPanel Orientation="Vertical" Margin="5"HorizontalAlignment="Center"><Image Name="goodsImage" Height="80" Width="80" Margin="5"></Image><TextBlock Name="goodsPrice" Margin="5"></TextBlock><TextBlock Name="goodsQty" Margin="5"></TextBlock><Image Name="goodsBuy" Source="image/add.png" Height="25" Width="25" Cursor="Hand" Margin="5"><Image.ToolTip>Add Quantity</Image.ToolTip></Image></StackPanel></Border></Grid> </UserControl>
效果图:
3. 控件编好后,回到上一篇的3.2.2 将那些C#修改一下,代码行数减少了一半还多。这样做虽然C#少了,不知道程序的效率会不会提高?
int rowNum = 0; int colNum = 0; //Make element for goods for (int i = 0; i < num; i++) {//使用刚定义的GoodsElement控件GoodsElement goods = new GoodsElement();BitmapImage bitImage = new BitmapImage();bitImage.BeginInit();bitImage.UriSource = new Uri("image/shop/" + res[i, 2].ToString(), UriKind.Relative);bitImage.EndInit(); goods.goodsImage.Source = bitImage;goods.goodsPrice.Text = "Price: $" + res[i, 6].ToString();goods.goodsQty.Text = "Quantity: " + res[i, 5].ToString();goods.goodsQty.Name = "gQty" + res[i, 0].ToString();object findTextObj = queryGrid.FindName("gQty" + res[i, 0].ToString());if (findTextObj != null){queryGrid.UnregisterName("gQty" + res[i, 0].ToString());}queryGrid.RegisterName(goods.goodsQty.Name, goods.goodsQty);goods.goodsBuy.Tag = res[i, 0].ToString() + "-" + res[i, 5].ToString() + "-" + res[i, 6].ToString();goods.goodsBuy.MouseLeftButtonDown += addImage_MouseLeftButtonDown;goods.goodsBuy.Name = "bImage" + res[i, 0].ToString();object findImageObj = queryGrid.FindName("bImage" + res[i, 0].ToString());if (findImageObj != null){queryGrid.UnregisterName("bImage" + res[i, 0].ToString());}queryGrid.RegisterName(goods.goodsBuy.Name, goods.goodsBuy);//Set GoodsElement grid postionif (colNum == 5){rowNum++;colNum = 0;}goods.SetValue(Grid.RowProperty, rowNum);goods.SetValue(Grid.ColumnProperty, colNum);colNum++;queryGrid.Children.Add(goods); }
待续… …
WPF编游戏系列 之四 用户控件相关推荐
- wpf项目中类库内新建用户控件和自定义控件的问题
项目中碰到这么个问题:在类库中添加自定义控件,有2个问题:1.添加时没有模板:2.自行添加类和资源文件后编译没问题,但是使用时失败: 这个问题困扰我好几天了网上也没找到方法,今天解决了 ,希望可以帮助 ...
- WPF编游戏系列 之六 动画效果(1)
本篇主要针对界面进行动画效果处理.首先在打开或关闭界面时,使其产生动态效果而不是生硬的显示或消失(如下图).其次在鼠标放到关闭窗口图标上时,使其出现闪动效果.下面将通过Storyboard和Event ...
- 【WPF学习笔记】之如何点击“新建”按钮,在面板中加载一条条的“用户控件”的信息:动画系列之(四)...
...... 承接上一系列动画三. 在主界面后台代码设置嵌套第二个用户控件. using System; using System.Collections.Generic; using System. ...
- 一步一步学Silverlight 2系列(10):使用用户控件
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性
原文:WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性 如果你要自定义一个图片按钮控件,那么如何在主窗体绑定这个控件上图片的Source呢? ...
- delphi 登录界面 主窗体 切换_.NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐)
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 快到2020年了,祝大家新年快乐,今年2019最后一更,谢谢大家支持! 阅读导航 本文背景 代 ...
- C#入门学习-----图书阅读器(WPF 用户控件技术)
欢迎大家提出意见,一起讨论! 转载请标明是引用于 http://blog.csdn.net/chenyujing1234 需要源码请与我联系. 编译平台:VS2008 + .Net Framework ...
- WPF 用户控件和 WPF自定义控件区别
WPF 用户控件 将多个现有的控件组合成一个可重用的"组". 由一个XAML文件和一个后台代码文件. 不能使用样式和模板. 继承自UserControl类. WPF自定义控件(扩展 ...
- WPF框架嵌套用户控件,显示与切换(详细,代码复制可用)
WPF框架手敲实现嵌套页面,点击显示与切换 下面附上成果图吧,看了之后觉得适用就可以参考一下,否则就不要浪费时间了 操作时间 1.此篇作为学习记录,是一个WPF框架window嵌套用户控件的使用.点击 ...
最新文章
- OC中数组排序的3种方法
- Java类的继承总结
- fiddler手机端抓包配置
- Java Thread类最终同步的void join(long time_in_ms)方法,带有示例
- 我往手里面植入了一枚芯片,但并没有获得超能力
- 自适应灰色动态滚动网站404页面源码
- Use Visual Studio Code to create and run Transact-SQL scripts for SQL Server
- 使用Angular与TypeScript构建Electron应用(五)
- 水晶易表Xcelsius 2008安装指南 支持WIN10 64位 + office2016
- ArcGIS js api中关于比例尺单位改为中文的方式
- 利用Python脚本计算基因组测序数据Nx0
- php 教育类,php教育培训网站是哪个
- 软件开发岗位职责描述
- h5案例分享 京东:有爱圣诞 无限京喜
- 呼叫中心电话系统怎么搭建?能用到哪些智能应用?
- tooth的用法_tooth的复数和用法例句
- SEO为什么没办法快速见效
- 读书的理由——好书推荐
- Android投屏到Windows电脑
- 四川初中计算机老师工资多少,揭秘四川中小学教师工资待遇,你觉得高吗?
热门文章
- PageAdmin CMS网站建设教程:如何实现信息的定时发布
- HTTP API 自动化测试从手工测试到平台的演变
- springboot里面logback使用
- Layout两列定宽中间自适应三列布局
- 【 js 片段 】如何组织表单的默认提交?【亲测有效】
- .NET经典资源站点汇总
- spring boot 异常(exception)处理
- java.lang.IllegalStateException: Failed to load ApplicationContext,这个异常的解决方案
- 如何检查加载了哪个版本的jQuery?
- Python单元测试去哪儿了?