WPF编游戏系列 之四 用户控件

简介:

   在上一篇《WPF编游戏系列 之三 物品清单》中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2.2中使用的C#代码过多,其实我在写这些代码时也有同感,的确很繁琐也不好维护。其实这组控件的结构就是:<StackPanel><Image><Textblock><Textblock><Image>这5个控件的组合,那么能否将其做成一个控件组呢?“用户控件”即可实现这个功能。

ele

1. 创建一个用户控件,右键项目名称,Add->New Item,选择User Control,新建一个GoodsElement控件。

2

VS会在Solution Explorer中创建一个新的XAML文件。

solution

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>

效果图:

ele3

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 postion if (colNum == 5) { rowNum++; colNum = 0; } goods.SetValue(Grid.RowProperty, rowNum); goods.SetValue(Grid.ColumnProperty, colNum); colNum++; queryGrid.Children.Add(goods); }

待续… …




本文转自Gnie博客园博客,原文链接:http://www.cnblogs.com/gnielee/archive/2009/12/10/wpf-xmarket-game-part4.html,如需转载请自行联系原作者

相关文章
|
前端开发 C# 图形学
【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示
Wpf开发过程中,最经常使用的功能之一,就是用户控件(UserControl)了。用户控件可以用于开发用户自己的控件进行使用,甚至可以用于打造一套属于自己的UI框架。依赖属性(DependencyProperty)是为用户控件提供可支持双向绑定的必备技巧之一,同样用处也非常广泛。
783 0
【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示
|
XML C# 数据格式
WPF中用户控件和自定义控件
无论是在WPF中还是WinForm中,都有用户控件(UserControl)和自定义控件(CustomControl),这两种控件都是对已有控件的封装,实现功能重用。但是两者还是有一些区别,本文对这两种控件进行讲解。
|
C# 前端开发
WPF如何得到一个在用户控件内部的元素的坐标位置
原文:WPF如何得到一个在用户控件内部的元素的坐标位置 例如有这样一个用户控件: 这是主窗口: ...
1371 0
|
C#
用游戏杆控制WPF中三维模型
原文:用游戏杆控制WPF中三维模型 用游戏杆控制WPF中三维模型   今天心情比较好,不写WF的文章了,换个主题.写一个我最最最擅长的内容.   例子下载: http://files.
869 0
|
C# 前端开发
WPF特效-拼图游戏
原文:WPF特效-拼图游戏 此文主要描述我实现碎片化的便捷过程。 步骤1:    选取参考图如下(百度图库搜的): 步骤2:    根据效果图或者模型构建贝塞尔曲线,为了方便查看效果,可以设置控制点,Console.WriteLine或直接UI上显示的方式记录最终坐标,效果图如:    上图中的红线,为两条贝塞尔曲线,左侧的位置我已经通过控制点的方式调好。
1391 0
|
C# 前端开发
WPF编游戏系列 之二 图标效果
原文:WPF编游戏系列 之二 图标效果        本篇将要实现图标的两个效果:1. 显示图标标签,2. 图标模糊效果。在上一篇中提到Image没有HTML 的Title属性(在MSDN中也没找到类似的属性),所以本篇将自行制作一个标签,它的功能是当鼠标移动到图标上方时会显示该图标的Tag说明,并且该图标模糊显示,如下图对比所示。
727 0
|
前端开发 C#
WPF编游戏系列 之一 布局设计
原文:WPF编游戏系列 之一 布局设计        本系列主要使用WPF和C#编写一个简单的小游戏(暂命名XMarket),意在通过该实例进一步学习和体验WPF,也欢迎广大同仁拍砖交流。言归正传,在编写一个软件前首先要思考软件的结构与布局,图片放在哪,按钮放在哪,都要先设计一下。
624 0
|
C# C++
WPF编游戏系列 之四 用户控件
原文:WPF编游戏系列 之四 用户控件        在上一篇《WPF编游戏系列 之三 物品清单》中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2.2中使用的C#代码过多,其实我在写这些代码时也有同感,的确很繁琐也不好维护。
592 0
|
SQL C#
WPF编游戏系列 之三 物品清单
原文:WPF编游戏系列 之三 物品清单        本篇将介绍如何通过C#自动生成游戏界面,主要演示点击“My Shop”后如何显示所有物品清单。其中数据源来自于Access 2007,当然肯定会用到System.Data.OleDb。
854 0
|
C#
WPF编游戏系列 之六 动画效果(1)
原文:WPF编游戏系列 之六 动画效果(1)        本篇主要针对界面进行动画效果处理。首先在打开或关闭界面时,使其产生动态效果而不是生硬的显示或消失(如下图)。其次在鼠标放到关闭窗口图标上时,使其出现闪动效果。
667 0