在上一篇《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编游戏系列 之四 用户控件相关推荐

  1. wpf项目中类库内新建用户控件和自定义控件的问题

    项目中碰到这么个问题:在类库中添加自定义控件,有2个问题:1.添加时没有模板:2.自行添加类和资源文件后编译没问题,但是使用时失败: 这个问题困扰我好几天了网上也没找到方法,今天解决了 ,希望可以帮助 ...

  2. WPF编游戏系列 之六 动画效果(1)

    本篇主要针对界面进行动画效果处理.首先在打开或关闭界面时,使其产生动态效果而不是生硬的显示或消失(如下图).其次在鼠标放到关闭窗口图标上时,使其出现闪动效果.下面将通过Storyboard和Event ...

  3. 【WPF学习笔记】之如何点击“新建”按钮,在面板中加载一条条的“用户控件”的信息:动画系列之(四)...

    ...... 承接上一系列动画三. 在主界面后台代码设置嵌套第二个用户控件. using System; using System.Collections.Generic; using System. ...

  4. 一步一步学Silverlight 2系列(10):使用用户控件

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  5. WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性

    原文:WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性 如果你要自定义一个图片按钮控件,那么如何在主窗体绑定这个控件上图片的Source呢? ...

  6. delphi 登录界面 主窗体 切换_.NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐)

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 快到2020年了,祝大家新年快乐,今年2019最后一更,谢谢大家支持! 阅读导航 本文背景 代 ...

  7. C#入门学习-----图书阅读器(WPF 用户控件技术)

    欢迎大家提出意见,一起讨论! 转载请标明是引用于 http://blog.csdn.net/chenyujing1234 需要源码请与我联系. 编译平台:VS2008 + .Net Framework ...

  8. WPF 用户控件和 WPF自定义控件区别

    WPF 用户控件 将多个现有的控件组合成一个可重用的"组". 由一个XAML文件和一个后台代码文件. 不能使用样式和模板. 继承自UserControl类. WPF自定义控件(扩展 ...

  9. WPF框架嵌套用户控件,显示与切换(详细,代码复制可用)

    WPF框架手敲实现嵌套页面,点击显示与切换 下面附上成果图吧,看了之后觉得适用就可以参考一下,否则就不要浪费时间了 操作时间 1.此篇作为学习记录,是一个WPF框架window嵌套用户控件的使用.点击 ...

最新文章

  1. OC中数组排序的3种方法
  2. Java类的继承总结
  3. fiddler手机端抓包配置
  4. Java Thread类最终同步的void join(long time_in_ms)方法,带有示例
  5. 我往手里面植入了一枚芯片,但并没有获得超能力
  6. 自适应灰色动态滚动网站404页面源码
  7. Use Visual Studio Code to create and run Transact-SQL scripts for SQL Server
  8. 使用Angular与TypeScript构建Electron应用(五)
  9. 水晶易表Xcelsius 2008安装指南 支持WIN10 64位 + office2016
  10. ArcGIS js api中关于比例尺单位改为中文的方式
  11. 利用Python脚本计算基因组测序数据Nx0
  12. php 教育类,php教育培训网站是哪个
  13. 软件开发岗位职责描述
  14. h5案例分享 京东:有爱圣诞 无限京喜
  15. 呼叫中心电话系统怎么搭建?能用到哪些智能应用?
  16. tooth的用法_tooth的复数和用法例句
  17. SEO为什么没办法快速见效
  18. 读书的理由——好书推荐
  19. Android投屏到Windows电脑
  20. 四川初中计算机老师工资多少,揭秘四川中小学教师工资待遇,你觉得高吗?

热门文章

  1. PageAdmin CMS网站建设教程:如何实现信息的定时发布
  2. HTTP API 自动化测试从手工测试到平台的演变
  3. springboot里面logback使用
  4. Layout两列定宽中间自适应三列布局
  5. 【 js 片段 】如何组织表单的默认提交?【亲测有效】
  6. .NET经典资源站点汇总
  7. spring boot 异常(exception)处理
  8. java.lang.IllegalStateException: Failed to load ApplicationContext,这个异常的解决方案
  9. 如何检查加载了哪个版本的jQuery?
  10. Python单元测试去哪儿了?