<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_加菲猫</title><subtitle type="text">Just have a little faith.</subtitle><id>http://feed.cnblogs.com/blog/u/74764/rss</id><updated>2012-05-27T06:08:23Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/74764/rss"/><entry><id>http://www.cnblogs.com/linzheng/archive/2012/05/27/2469108.html</id><title type="text">XNA游戏：各种输入测试</title><summary type="text">测试XNA游戏中键盘输入，触控输入，按钮输入Game1.csusing System;using System.Collections.Generic;using System.Linq;using Microsoft.Xna.Framework;using Microsoft.Xna.Framework.Audio;using Microsoft.Xna.Framework.Content;using Microsoft.Xna.Framework.GamerServices;using Microsoft.Xna.Framework.Graphics;using Microsoft.Xna</summary><published>2012-05-27T06:07:00Z</published><updated>2012-05-27T06:07:00Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/linzheng/archive/2012/05/27/2469108.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/archive/2012/05/27/2469108.html"/><content type="html">&lt;p&gt;测试XNA游戏中键盘输入，触控输入，按钮输入&lt;/p&gt;&lt;p&gt;Game1.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Audio;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.GamerServices;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Media;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; InputHandlerDemo.Inputs;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; InputHandlerDemo&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1 : Microsoft.Xna.Framework.Game&lt;br/&gt;    {&lt;br/&gt;        GraphicsDeviceManager graphics;&lt;br/&gt;        SpriteBatch spriteBatch;&lt;br/&gt;&lt;br/&gt;        SpriteFont font;&lt;br/&gt;        Texture2D square;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; action = &lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;        GameInput gameInput;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;游戏输入管理类&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;        TouchIndicatorCollection touchIndicators;&lt;br/&gt;&lt;br/&gt;        Rectangle JumpRectangle &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;480&lt;/span&gt;, &lt;span style="color: #800080;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        Rectangle UpRectangle &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;150&lt;/span&gt;, &lt;span style="color: #800080;"&gt;480&lt;/span&gt;, &lt;span style="color: #800080;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        Rectangle PauseRectangle &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;500&lt;/span&gt;, &lt;span style="color: #800080;"&gt;200&lt;/span&gt;, &lt;span style="color: #800080;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;退出矩形&lt;/span&gt;&lt;br/&gt;        Rectangle ExitRectangle = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle(&lt;span style="color: #800080;"&gt;220&lt;/span&gt;, &lt;span style="color: #800080;"&gt;500&lt;/span&gt;, &lt;span style="color: #800080;"&gt;200&lt;/span&gt;, &lt;span style="color: #800080;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1()&lt;br/&gt;        {&lt;br/&gt;            graphics &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GraphicsDeviceManager(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            Content.RootDirectory &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Content&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            TargetElapsedTime &lt;/span&gt;= TimeSpan.FromTicks(&lt;span style="color: #800080;"&gt;333333&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置高度和宽度&lt;/span&gt;&lt;br/&gt;            graphics.PreferredBackBufferWidth = &lt;span style="color: #800080;"&gt;480&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            graphics.PreferredBackBufferHeight &lt;/span&gt;= &lt;span style="color: #800080;"&gt;800&lt;/span&gt;&lt;span style="color: #000000;"&gt;;  &lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Initialize()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;初始化游戏输入对象&lt;/span&gt;&lt;br/&gt;            gameInput = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; GameInput();&lt;br/&gt;            touchIndicators &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; TouchIndicatorCollection();&lt;br/&gt;&lt;br/&gt;            AddInputs();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Initialize();&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 添加各种输入方式&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; AddInputs()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;游戏按钮&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Add keyboard, gamepad and touch inputs for Jump&lt;/span&gt;&lt;br/&gt;            gameInput.AddKeyboardInput(Actions.Jump, Keys.A, &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;A键为跳&lt;/span&gt;&lt;br/&gt;            gameInput.AddKeyboardInput(Actions.Jump, Keys.Space, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Space键为跳&lt;/span&gt;&lt;br/&gt;            gameInput.AddTouchTapInput(Actions.Jump, JumpRectangle, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;跳矩形区域为跳&lt;/span&gt;&lt;br/&gt;            gameInput.AddTouchSlideInput(Actions.Jump, Input.Direction.Right, &lt;span style="color: #800080;"&gt;5.0f&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;右滑动为跳&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Add keyboard, gamepad and touch inputs for Pause&lt;/span&gt;&lt;br/&gt;            gameInput.AddGamePadInput(Actions.Pause, Buttons.Start, &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddKeyboardInput(Actions.Pause, Keys.P, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddTouchTapInput(Actions.Pause, PauseRectangle, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddAccelerometerInput(Actions.Pause,&lt;br/&gt;                                            Input.Direction.Down,&lt;br/&gt;                                            &lt;/span&gt;&lt;span style="color: #800080;"&gt;0.10f&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Add keyboard, gamepad and touch inputs for Up&lt;/span&gt;&lt;br/&gt;            gameInput.AddGamePadInput(Actions.Up, Buttons.RightThumbstickUp, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddGamePadInput(Actions.Up, Buttons.LeftThumbstickUp, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddGamePadInput(Actions.Up, Buttons.DPadUp, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddKeyboardInput(Actions.Up, Keys.Up, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddKeyboardInput(Actions.Up, Keys.W, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddTouchTapInput(Actions.Up, UpRectangle, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddTouchSlideInput(Actions.Up, Input.Direction.Up, &lt;/span&gt;&lt;span style="color: #800080;"&gt;5.0f&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddAccelerometerInput(Actions.Up,&lt;br/&gt;                                            Input.Direction.Up,&lt;br/&gt;                                            &lt;/span&gt;&lt;span style="color: #800080;"&gt;0.10f&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Add keyboard, gamepad and touch inputs for Exit&lt;/span&gt;&lt;br/&gt;            gameInput.AddGamePadInput(Actions.Exit, Buttons.Back, &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddKeyboardInput(Actions.Exit, Keys.Escape, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            gameInput.AddTouchTapInput(Actions.Exit, ExitRectangle, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Add some Gestures too, just to show them off?&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            gameInput.AddTouchGestureInput(Actions.Jump,&lt;br/&gt;                                           GestureType.VerticalDrag,&lt;br/&gt;                                           JumpRectangle);&lt;br/&gt;            gameInput.AddTouchGestureInput(Actions.Pause,&lt;br/&gt;                                           GestureType.Hold,&lt;br/&gt;                                           PauseRectangle);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Create a new SpriteBatch, which can be used to draw textures.&lt;/span&gt;&lt;br/&gt;            spriteBatch = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SpriteBatch(GraphicsDevice);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;加载内容&lt;/span&gt;&lt;br/&gt;            font = Content.Load&amp;lt;SpriteFont&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Display&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            square &lt;/span&gt;= Content.Load&amp;lt;Texture2D&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Pixel&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; UnloadContent()&lt;br/&gt;        {&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Update(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (GamePad.GetState(PlayerIndex.One).Buttons.Back ==&lt;span style="color: #000000;"&gt; ButtonState.Pressed)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Exit();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;根据输入类型更新游戏界面&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            gameInput.BeginUpdate();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;点击退出矩形，退出程序&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (gameInput.IsPressed(Actions.Exit, PlayerIndex.One))&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Exit();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (gameInput.IsPressed(Actions.Jump, PlayerIndex.One))&lt;br/&gt;                action &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Actions.Jump;&lt;br/&gt;  &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (gameInput.IsPressed(Actions.Pause, PlayerIndex.One))&lt;br/&gt;                action &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Actions.Pause;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (gameInput.IsPressed(Actions.Up, PlayerIndex.One))&lt;br/&gt;                action &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Actions.Up;&lt;br/&gt;&lt;br/&gt;            touchIndicators.Update(gameTime, Content);&lt;br/&gt;&lt;br/&gt;            gameInput.EndUpdate();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Update(gameTime);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            GraphicsDevice.Clear(Color.CornflowerBlue);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;绘制游戏界面&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            spriteBatch.Begin();&lt;br/&gt;&lt;br/&gt;            spriteBatch.Draw(square, UpRectangle, Color.Blue);&lt;br/&gt;            spriteBatch.DrawString(font,&lt;br/&gt;                                   &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Up&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br/&gt;                                   &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(UpRectangle.Left + &lt;span style="color: #800080;"&gt;20&lt;/span&gt;, UpRectangle.Top + &lt;span style="color: #800080;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;br/&gt;                                   Color.Black);&lt;br/&gt;&lt;br/&gt;            spriteBatch.Draw(square, JumpRectangle, Color.Yellow);&lt;br/&gt;            spriteBatch.DrawString(font,&lt;br/&gt;                                   &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Jump&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br/&gt;                                   &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(JumpRectangle.Left + &lt;span style="color: #800080;"&gt;20&lt;/span&gt;, JumpRectangle.Top + &lt;span style="color: #800080;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;br/&gt;                                   Color.Black);&lt;br/&gt;&lt;br/&gt;            spriteBatch.Draw(square, PauseRectangle, Color.Green);&lt;br/&gt;            spriteBatch.DrawString(font,&lt;br/&gt;                                   &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Pause&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br/&gt;                                   &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(PauseRectangle.Left + &lt;span style="color: #800080;"&gt;20&lt;/span&gt;, PauseRectangle.Top + &lt;span style="color: #800080;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;br/&gt;                                   Color.Black);&lt;br/&gt;&lt;br/&gt;            spriteBatch.Draw(square, ExitRectangle, Color.Red);&lt;br/&gt;            spriteBatch.DrawString(font,&lt;br/&gt;                                   &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Exit&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br/&gt;                                   &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(ExitRectangle.Left + &lt;span style="color: #800080;"&gt;20&lt;/span&gt;, ExitRectangle.Top + &lt;span style="color: #800080;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;br/&gt;                                   Color.Black);&lt;br/&gt;&lt;br/&gt;            spriteBatch.DrawString(font, action, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;100&lt;/span&gt;, &lt;span style="color: #800080;"&gt;350&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.White);&lt;br/&gt;&lt;br/&gt;            touchIndicators.Draw(spriteBatch);&lt;br/&gt;&lt;br/&gt;            spriteBatch.End(); &lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Draw(gameTime);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Action.cs 游戏操作的类型&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; InputHandlerDemo&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Actions&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 自定义的操作类型&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Jump = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Jump&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Exit = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Exit&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Up = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Up&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Pause = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Pause&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;下面是输入的操作的封装类&lt;/p&gt;&lt;p&gt;GameInput.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; InputHandlerDemo.Inputs&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 游戏输入管理类&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; GameInput&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;输入类型字典&lt;/span&gt;&lt;br/&gt;        Dictionary&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;, Input&amp;gt; Inputs = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;, Input&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取输入类型&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Input GetInput(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;如果没有改类型的输入操作则添加一个&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Inputs.ContainsKey(theAction) == &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                Inputs.Add(theAction, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Input());&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Inputs[theAction];&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; BeginUpdate()&lt;br/&gt;        {&lt;br/&gt;            Input.BeginUpdate();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; EndUpdate()&lt;br/&gt;        {&lt;br/&gt;            Input.EndUpdate();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsConnected(PlayerIndex thePlayer)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; If there never WAS a gamepad connected, just say the gamepad is STILL connected&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Input.GamepadConnectionState[thePlayer] == &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Input.IsConnected(thePlayer);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; IsPressed(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;Inputs.ContainsKey(theAction))&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Inputs[theAction].IsPressed(PlayerIndex.One);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 判断单击的状态&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="theAction"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;动作&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="thePlayer"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;玩家&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; IsPressed(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction, PlayerIndex thePlayer)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Inputs.ContainsKey(theAction) == &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Inputs[theAction].IsPressed(thePlayer);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; IsPressed(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; theAction, PlayerIndex?&lt;span style="color: #000000;"&gt; thePlayer)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (thePlayer == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                PlayerIndex theReturnedControllingPlayer;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; IsPressed(theAction, thePlayer, &lt;span style="color: #0000ff;"&gt;out&lt;/span&gt;&lt;span style="color: #000000;"&gt; theReturnedControllingPlayer);&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsPressed(theAction, (PlayerIndex)thePlayer);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; IsPressed(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; theAction, PlayerIndex? thePlayer, &lt;span style="color: #0000ff;"&gt;out&lt;/span&gt;&lt;span style="color: #000000;"&gt; PlayerIndex theControllingPlayer)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;Inputs.ContainsKey(theAction))&lt;br/&gt;            {&lt;br/&gt;                theControllingPlayer &lt;/span&gt;=&lt;span style="color: #000000;"&gt; PlayerIndex.One;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (thePlayer == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (IsPressed(theAction, PlayerIndex.One))&lt;br/&gt;                {&lt;br/&gt;                    theControllingPlayer &lt;/span&gt;=&lt;span style="color: #000000;"&gt; PlayerIndex.One;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (IsPressed(theAction, PlayerIndex.Two))&lt;br/&gt;                {&lt;br/&gt;                    theControllingPlayer &lt;/span&gt;=&lt;span style="color: #000000;"&gt; PlayerIndex.Two;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (IsPressed(theAction, PlayerIndex.Three))&lt;br/&gt;                {&lt;br/&gt;                    theControllingPlayer &lt;/span&gt;=&lt;span style="color: #000000;"&gt; PlayerIndex.Three;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (IsPressed(theAction, PlayerIndex.Four))&lt;br/&gt;                {&lt;br/&gt;                    theControllingPlayer &lt;/span&gt;=&lt;span style="color: #000000;"&gt; PlayerIndex.Four;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;&lt;br/&gt;                theControllingPlayer &lt;/span&gt;=&lt;span style="color: #000000;"&gt; PlayerIndex.One;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            theControllingPlayer &lt;/span&gt;=&lt;span style="color: #000000;"&gt; (PlayerIndex)thePlayer;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsPressed(theAction, (PlayerIndex)thePlayer);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddGamePadInput(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction, Buttons theButton,&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; isReleasedPreviously)&lt;br/&gt;        {&lt;br/&gt;            GetInput(theAction).AddGamepadInput(theButton, isReleasedPreviously);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddTouchTapInput(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction, Rectangle theTouchArea,&lt;br/&gt;                                     &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; isReleasedPreviously)&lt;br/&gt;        {&lt;br/&gt;            GetInput(theAction).AddTouchTapInput(theTouchArea, isReleasedPreviously);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddTouchSlideInput(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction, Input.Direction theDirection,&lt;br/&gt;                                       &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt; slideDistance)&lt;br/&gt;        {&lt;br/&gt;            GetInput(theAction).AddTouchSlideInput(theDirection, slideDistance);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddKeyboardInput(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction, Keys theKey,&lt;br/&gt;                                     &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; isReleasedPreviously)&lt;br/&gt;        {&lt;br/&gt;            GetInput(theAction).AddKeyboardInput(theKey, isReleasedPreviously);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddTouchGestureInput(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction, GestureType theGesture,&lt;br/&gt;                                         Rectangle theRectangle)&lt;br/&gt;        {&lt;br/&gt;            GetInput(theAction).AddTouchGesture(theGesture, theRectangle);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddAccelerometerInput(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction, Input.Direction theDirection,&lt;br/&gt;                                          &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt; tiltThreshold)&lt;br/&gt;        {&lt;br/&gt;            GetInput(theAction).AddAccelerometerInput(theDirection, tiltThreshold);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Vector2 CurrentGesturePosition(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetInput(theAction).CurrentGesturePosition();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Vector2 CurrentGestureDelta(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetInput(theAction).CurrentGestureDelta();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Vector2 CurrentGesturePosition2(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetInput(theAction).CurrentGesturePosition2();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Vector2 CurrentGestureDelta2(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetInput(theAction).CurrentGestureDelta2();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Point CurrentTouchPoint(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction)&lt;br/&gt;        {&lt;br/&gt;            Vector2&lt;/span&gt;? currentPosition =&lt;span style="color: #000000;"&gt; GetInput(theAction).CurrentTouchPosition();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (currentPosition == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Point(-&lt;span style="color: #800080;"&gt;1&lt;/span&gt;, -&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Point((&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)currentPosition.Value.X, (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;)currentPosition.Value.Y);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Vector2 CurrentTouchPosition(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction)&lt;br/&gt;        {&lt;br/&gt;            Vector2&lt;/span&gt;? currentTouchPosition =&lt;span style="color: #000000;"&gt; GetInput(theAction).CurrentTouchPosition();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (currentTouchPosition == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(-&lt;span style="color: #800080;"&gt;1&lt;/span&gt;, -&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Vector2)currentTouchPosition;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; CurrentGestureScaleChange(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Scaling is dependent on the Pinch gesture. If no input has been setup for &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Pinch then just return 0 indicating no scale change has occurred.&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!GetInput(theAction).PinchGestureAvailable) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Get the current and previous locations of the two fingers&lt;/span&gt;&lt;br/&gt;            Vector2 currentPositionFingerOne =&lt;span style="color: #000000;"&gt; CurrentGesturePosition(theAction);&lt;br/&gt;            Vector2 previousPositionFingerOne&lt;br/&gt;                &lt;/span&gt;= CurrentGesturePosition(theAction) -&lt;span style="color: #000000;"&gt; CurrentGestureDelta(theAction);&lt;br/&gt;            Vector2 currentPositionFingerTwo &lt;/span&gt;=&lt;span style="color: #000000;"&gt; CurrentGesturePosition2(theAction);&lt;br/&gt;            Vector2 previousPositionFingerTwo&lt;br/&gt;                &lt;/span&gt;= CurrentGesturePosition2(theAction) -&lt;span style="color: #000000;"&gt; CurrentGestureDelta2(theAction);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Figure out the distance between the current and previous locations&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; currentDistance =&lt;span style="color: #000000;"&gt; Vector2.Distance(currentPositionFingerOne, currentPositionFingerTwo);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt; previousDistance&lt;br/&gt;                &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Vector2.Distance(previousPositionFingerOne, previousPositionFingerTwo);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Calculate the difference between the two and use that to alter the scale&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; scaleChange = (currentDistance - previousDistance) *&lt;span style="color: #000000;"&gt; .01f;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; scaleChange;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Vector3 CurrentAccelerometerReading(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; theAction)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetInput(theAction).CurrentAccelerometerReading;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;GestureDefinition.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; InputHandlerDemo.Inputs&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 手势定义&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureDefinition&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType Type;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Rectangle CollisionArea;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureSample Gesture;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2 Delta;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2 Delta2;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2 Position;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2 Position2;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureDefinition(GestureType theGestureType, Rectangle theGestureArea)&lt;br/&gt;        {&lt;br/&gt;            Gesture &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GestureSample(theGestureType, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; TimeSpan(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;br/&gt;                                        Vector2.Zero, Vector2.Zero,&lt;br/&gt;                                        Vector2.Zero, Vector2.Zero);&lt;br/&gt;            Type &lt;/span&gt;=&lt;span style="color: #000000;"&gt; theGestureType;&lt;br/&gt;            CollisionArea &lt;/span&gt;=&lt;span style="color: #000000;"&gt; theGestureArea;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureDefinition(GestureSample theGestureSample)&lt;br/&gt;        {&lt;br/&gt;            Gesture &lt;/span&gt;=&lt;span style="color: #000000;"&gt; theGestureSample;&lt;br/&gt;            Type &lt;/span&gt;=&lt;span style="color: #000000;"&gt; theGestureSample.GestureType;&lt;br/&gt;            CollisionArea &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle((&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;)theGestureSample.Position.X,&lt;br/&gt;                                          (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)theGestureSample.Position.Y, &lt;span style="color: #800080;"&gt;5&lt;/span&gt;, &lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;            Delta &lt;/span&gt;=&lt;span style="color: #000000;"&gt; theGestureSample.Delta;&lt;br/&gt;            Delta2 &lt;/span&gt;=&lt;span style="color: #000000;"&gt; theGestureSample.Delta2;&lt;br/&gt;            Position &lt;/span&gt;=&lt;span style="color: #000000;"&gt; theGestureSample.Position;&lt;br/&gt;            Position2 &lt;/span&gt;=&lt;span style="color: #000000;"&gt; theGestureSample.Position2;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Input.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Devices.Sensors;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; InputHandlerDemo.Inputs&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 输入操作类&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Input&lt;br/&gt;    {&lt;br/&gt;        Dictionary&lt;/span&gt;&amp;lt;Keys, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&amp;gt; keyboardInputs = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;Keys, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;        Dictionary&lt;/span&gt;&amp;lt;Buttons, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&amp;gt; gamepadInputs = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;Buttons, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;        Dictionary&lt;/span&gt;&amp;lt;Rectangle, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&amp;gt; touchTapInputs = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;Rectangle, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;        Dictionary&lt;/span&gt;&amp;lt;Direction, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&amp;gt; touchSlideInputs = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;Direction, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;        Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;, GestureDefinition&amp;gt; gestureInputs = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;, GestureDefinition&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;        Dictionary&lt;/span&gt;&amp;lt;Direction, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&amp;gt; accelerometerInputs = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;Direction, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Dictionary&amp;lt;PlayerIndex, GamePadState&amp;gt; CurrentGamePadState&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;当前玩家的控制状态&lt;/span&gt;&lt;br/&gt;    = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;PlayerIndex, GamePadState&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Dictionary&amp;lt;PlayerIndex, GamePadState&amp;gt; PreviousGamePadState&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;上一个玩家的控制状态&lt;/span&gt;&lt;br/&gt;            = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;PlayerIndex, GamePadState&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; TouchCollection CurrentTouchLocationState;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;当前的触控集合&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; TouchCollection PreviousTouchLocationState;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;上一个触控集合&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; KeyboardState CurrentKeyboardState;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;当前的键盘状态&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; KeyboardState PreviousKeyboardState;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;上一个键盘状态&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Dictionary&amp;lt;PlayerIndex, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt; GamepadConnectionState&lt;br/&gt;    &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;PlayerIndex, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; List&amp;lt;GestureDefinition&amp;gt; detectedGestures = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;GestureDefinition&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; Accelerometer accelerometerSensor;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector3 currentAccelerometerReading;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;方向&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;enum&lt;/span&gt;&lt;span style="color: #000000;"&gt; Direction&lt;br/&gt;        {&lt;br/&gt;            Up,&lt;br/&gt;            Down,&lt;br/&gt;            Left,&lt;br/&gt;            Right&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Input()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (CurrentGamePadState.Count == &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                CurrentGamePadState.Add(PlayerIndex.One, GamePad.GetState(PlayerIndex.One));&lt;br/&gt;                CurrentGamePadState.Add(PlayerIndex.Two, GamePad.GetState(PlayerIndex.Two));&lt;br/&gt;                CurrentGamePadState.Add(PlayerIndex.Three, GamePad.GetState(PlayerIndex.Three));&lt;br/&gt;                CurrentGamePadState.Add(PlayerIndex.Four, GamePad.GetState(PlayerIndex.Four));&lt;br/&gt;&lt;br/&gt;                PreviousGamePadState.Add(PlayerIndex.One, GamePad.GetState(PlayerIndex.One));&lt;br/&gt;                PreviousGamePadState.Add(PlayerIndex.Two, GamePad.GetState(PlayerIndex.Two));&lt;br/&gt;                PreviousGamePadState.Add(PlayerIndex.Three, GamePad.GetState(PlayerIndex.Three));&lt;br/&gt;                PreviousGamePadState.Add(PlayerIndex.Four, GamePad.GetState(PlayerIndex.Four));&lt;br/&gt;&lt;br/&gt;                GamepadConnectionState.Add(PlayerIndex.One,&lt;br/&gt;                    CurrentGamePadState[PlayerIndex.One].IsConnected);&lt;br/&gt;                GamepadConnectionState.Add(PlayerIndex.Two,&lt;br/&gt;                    CurrentGamePadState[PlayerIndex.Two].IsConnected);&lt;br/&gt;                GamepadConnectionState.Add(PlayerIndex.Three,&lt;br/&gt;                    CurrentGamePadState[PlayerIndex.Three].IsConnected);&lt;br/&gt;                GamepadConnectionState.Add(PlayerIndex.Four,&lt;br/&gt;                    CurrentGamePadState[PlayerIndex.Four].IsConnected);&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加重力感应&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (accelerometerSensor == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                accelerometerSensor &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Accelerometer();&lt;br/&gt;                accelerometerSensor.ReadingChanged&lt;br/&gt;                    &lt;/span&gt;+= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; EventHandler&amp;lt;AccelerometerReadingEventArgs&amp;gt;&lt;span style="color: #000000;"&gt;(AccelerometerReadingChanged);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 开始更新&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; BeginUpdate()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;PlayerIndex游戏玩家的索引，添加4个玩家&lt;/span&gt;&lt;br/&gt;            CurrentGamePadState[PlayerIndex.One] =&lt;span style="color: #000000;"&gt; GamePad.GetState(PlayerIndex.One);&lt;br/&gt;            CurrentGamePadState[PlayerIndex.Two] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; GamePad.GetState(PlayerIndex.Two);&lt;br/&gt;            CurrentGamePadState[PlayerIndex.Three] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; GamePad.GetState(PlayerIndex.Three);&lt;br/&gt;            CurrentGamePadState[PlayerIndex.Four] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; GamePad.GetState(PlayerIndex.Four);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;当前触摸的地方&lt;/span&gt;&lt;br/&gt;            CurrentTouchLocationState =&lt;span style="color: #000000;"&gt; TouchPanel.GetState();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;玩家1的状态&lt;/span&gt;&lt;br/&gt;            CurrentKeyboardState =&lt;span style="color: #000000;"&gt; Keyboard.GetState(PlayerIndex.One);&lt;br/&gt;&lt;br/&gt;            detectedGestures.Clear();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt; (TouchPanel.IsGestureAvailable)&lt;br/&gt;            {&lt;br/&gt;                GestureSample gesture &lt;/span&gt;=&lt;span style="color: #000000;"&gt; TouchPanel.ReadGesture();&lt;br/&gt;                detectedGestures.Add(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureDefinition(gesture));&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 结束更新&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; EndUpdate()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;PlayerIndex游戏玩家的索引，日安家&lt;/span&gt;&lt;br/&gt;            PreviousGamePadState[PlayerIndex.One] =&lt;span style="color: #000000;"&gt; CurrentGamePadState[PlayerIndex.One];&lt;br/&gt;            PreviousGamePadState[PlayerIndex.Two] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; CurrentGamePadState[PlayerIndex.Two];&lt;br/&gt;            PreviousGamePadState[PlayerIndex.Three] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; CurrentGamePadState[PlayerIndex.Three];&lt;br/&gt;            PreviousGamePadState[PlayerIndex.Four] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; CurrentGamePadState[PlayerIndex.Four];&lt;br/&gt;&lt;br/&gt;            PreviousTouchLocationState &lt;/span&gt;=&lt;span style="color: #000000;"&gt; CurrentTouchLocationState;&lt;br/&gt;            PreviousKeyboardState &lt;/span&gt;=&lt;span style="color: #000000;"&gt; CurrentKeyboardState;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AccelerometerReadingChanged(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, AccelerometerReadingEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            currentAccelerometerReading.X &lt;/span&gt;= (&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt;)e.X;&lt;br/&gt;            currentAccelerometerReading.Y &lt;/span&gt;= (&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt;)e.Y;&lt;br/&gt;            currentAccelerometerReading.Z &lt;/span&gt;= (&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt;)e.Z;&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 添加一个键盘输入&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddKeyboardInput(Keys theKey, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; isReleasedPreviously)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (keyboardInputs.ContainsKey(theKey))&lt;br/&gt;            {&lt;br/&gt;                keyboardInputs[theKey] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; isReleasedPreviously;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            keyboardInputs.Add(theKey, isReleasedPreviously);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加一个游戏按钮输入&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddGamepadInput(Buttons theButton, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; isReleasedPreviously)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (gamepadInputs.ContainsKey(theButton))&lt;br/&gt;            {&lt;br/&gt;                gamepadInputs[theButton] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; isReleasedPreviously;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            gamepadInputs.Add(theButton, isReleasedPreviously);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加一个手势单击输入&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddTouchTapInput(Rectangle theTouchArea, &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; isReleasedPreviously)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (touchTapInputs.ContainsKey(theTouchArea))&lt;br/&gt;            {&lt;br/&gt;                touchTapInputs[theTouchArea] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; isReleasedPreviously;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            touchTapInputs.Add(theTouchArea, isReleasedPreviously);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加一个手势滑动输入&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddTouchSlideInput(Direction theDirection, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt; slideDistance)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (touchSlideInputs.ContainsKey(theDirection))&lt;br/&gt;            {&lt;br/&gt;                touchSlideInputs[theDirection] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; slideDistance;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            touchSlideInputs.Add(theDirection, slideDistance);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; PinchGestureAvailable = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;手势是否可用&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; AddTouchGesture(GestureType theGesture, Rectangle theTouchArea)&lt;br/&gt;        {&lt;br/&gt;            TouchPanel.EnabledGestures &lt;/span&gt;= theGesture |&lt;span style="color: #000000;"&gt; TouchPanel.EnabledGestures;&lt;br/&gt;            gestureInputs.Add(gestureInputs.Count, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureDefinition(theGesture, theTouchArea));&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (theGesture ==&lt;span style="color: #000000;"&gt; GestureType.Pinch)&lt;br/&gt;            {&lt;br/&gt;                PinchGestureAvailable &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; isAccelerometerStarted = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;重力加速是否可用&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddAccelerometerInput(Direction direction, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt; tiltThreshold)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;isAccelerometerStarted)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                {&lt;br/&gt;                    accelerometerSensor.Start();&lt;br/&gt;                    isAccelerometerStarted &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (AccelerometerFailedException e)&lt;br/&gt;                {&lt;br/&gt;                    isAccelerometerStarted &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                    System.Diagnostics.Debug.WriteLine(e.Message);&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            accelerometerInputs.Add(direction, tiltThreshold);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; RemoveAccelerometerInputs()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (isAccelerometerStarted)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                {&lt;br/&gt;                    accelerometerSensor.Stop();&lt;br/&gt;                    isAccelerometerStarted &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (AccelerometerFailedException e)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; The sensor couldn't be stopped.&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                    System.Diagnostics.Debug.WriteLine(e.Message);&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            accelerometerInputs.Clear();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsConnected(PlayerIndex thePlayerIndex)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; CurrentGamePadState[thePlayerIndex].IsConnected;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;是否选中玩家&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsPressed(PlayerIndex thePlayerIndex)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; IsPressed(thePlayerIndex, &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; IsPressed(PlayerIndex thePlayerIndex, Rectangle?&lt;span style="color: #000000;"&gt; theCurrentObjectLocation)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (IsKeyboardInputPressed())&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (IsGamepadInputPressed(thePlayerIndex))&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (IsTouchTapInputPressed())&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (IsTouchSlideInputPressed())&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;点钟矩形区域&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (IsGestureInputPressed(theCurrentObjectLocation))&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsKeyboardInputPressed()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Keys aKey &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; keyboardInputs.Keys)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (keyboardInputs[aKey]&lt;br/&gt;                &lt;/span&gt;&amp;amp;&amp;amp;&lt;span style="color: #000000;"&gt; CurrentKeyboardState.IsKeyDown(aKey)&lt;br/&gt;                &lt;/span&gt;&amp;amp;&amp;amp; !&lt;span style="color: #000000;"&gt;PreviousKeyboardState.IsKeyDown(aKey))&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;keyboardInputs[aKey]&lt;br/&gt;                &lt;/span&gt;&amp;amp;&amp;amp;&lt;span style="color: #000000;"&gt; CurrentKeyboardState.IsKeyDown(aKey))&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsGamepadInputPressed(PlayerIndex thePlayerIndex)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Buttons aButton &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; gamepadInputs.Keys)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (gamepadInputs[aButton]&lt;br/&gt;                &lt;/span&gt;&amp;amp;&amp;amp;&lt;span style="color: #000000;"&gt; CurrentGamePadState[thePlayerIndex].IsButtonDown(aButton)&lt;br/&gt;                &lt;/span&gt;&amp;amp;&amp;amp; !&lt;span style="color: #000000;"&gt;PreviousGamePadState[thePlayerIndex].IsButtonDown(aButton))&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;gamepadInputs[aButton]&lt;br/&gt;                &lt;/span&gt;&amp;amp;&amp;amp;&lt;span style="color: #000000;"&gt; CurrentGamePadState[thePlayerIndex].IsButtonDown(aButton))&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsTouchTapInputPressed()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Rectangle touchArea &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchTapInputs.Keys)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (touchTapInputs[touchArea]&lt;br/&gt;                &lt;/span&gt;&amp;amp;&amp;amp;&lt;span style="color: #000000;"&gt; touchArea.Intersects(CurrentTouchRectangle)&lt;br/&gt;                &lt;/span&gt;&amp;amp;&amp;amp; PreviousTouchPosition() == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;touchTapInputs[touchArea]&lt;br/&gt;                &lt;/span&gt;&amp;amp;&amp;amp;&lt;span style="color: #000000;"&gt; touchArea.Intersects(CurrentTouchRectangle))&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsTouchSlideInputPressed()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Direction slideDirection &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchSlideInputs.Keys)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (CurrentTouchPosition() != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; PreviousTouchPosition() != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (slideDirection)&lt;br/&gt;                    {&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; Direction.Up:&lt;br/&gt;                            {&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (CurrentTouchPosition().Value.Y +&lt;span style="color: #000000;"&gt; touchSlideInputs[slideDirection]&lt;br/&gt;                                    &lt;/span&gt;&amp;lt;&lt;span style="color: #000000;"&gt; PreviousTouchPosition().Value.Y)&lt;br/&gt;                                {&lt;br/&gt;                                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                                }&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                            }&lt;br/&gt;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; Direction.Down:&lt;br/&gt;                            {&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (CurrentTouchPosition().Value.Y -&lt;span style="color: #000000;"&gt; touchSlideInputs[slideDirection]&lt;br/&gt;                                    &lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt; PreviousTouchPosition().Value.Y)&lt;br/&gt;                                {&lt;br/&gt;                                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                                }&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                            }&lt;br/&gt;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; Direction.Left:&lt;br/&gt;                            {&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (CurrentTouchPosition().Value.X +&lt;span style="color: #000000;"&gt; touchSlideInputs[slideDirection]&lt;br/&gt;                                    &lt;/span&gt;&amp;lt;&lt;span style="color: #000000;"&gt; PreviousTouchPosition().Value.X)&lt;br/&gt;                                {&lt;br/&gt;                                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                                }&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                            }&lt;br/&gt;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; Direction.Right:&lt;br/&gt;                            {&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (CurrentTouchPosition().Value.X -&lt;span style="color: #000000;"&gt; touchSlideInputs[slideDirection]&lt;br/&gt;                                    &lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt; PreviousTouchPosition().Value.X)&lt;br/&gt;                                {&lt;br/&gt;                                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                                }&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                            }&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; IsGestureInputPressed(Rectangle?&lt;span style="color: #000000;"&gt; theNewDetectionLocation)&lt;br/&gt;        {&lt;br/&gt;            currentGestureDefinition &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (detectedGestures.Count == &lt;span style="color: #800080;"&gt;0&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Check to see if any of the Gestures defined in the gestureInputs &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; dictionary have been performed and detected.&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (GestureDefinition userDefinedGesture &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; gestureInputs.Values)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (GestureDefinition detectedGesture &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; detectedGestures)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (detectedGesture.Type ==&lt;span style="color: #000000;"&gt; userDefinedGesture.Type)&lt;br/&gt;                    {&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; If a Rectangle area to check against has been passed in, then&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; use that one, otherwise use the one originally defined&lt;/span&gt;&lt;br/&gt;                        Rectangle areaToCheck =&lt;span style="color: #000000;"&gt; userDefinedGesture.CollisionArea;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (theNewDetectionLocation != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                            areaToCheck &lt;/span&gt;=&lt;span style="color: #000000;"&gt; (Rectangle)theNewDetectionLocation;&lt;br/&gt;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; If the gesture detected was made in the area where users were&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; interested in Input (they intersect), then a gesture input is&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; considered detected.&lt;/span&gt;&lt;br/&gt;                        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (detectedGesture.CollisionArea.Intersects(areaToCheck))&lt;br/&gt;                        {&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (currentGestureDefinition == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                            {&lt;br/&gt;                                currentGestureDefinition&lt;br/&gt;                                    &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureDefinition(detectedGesture.Gesture);&lt;br/&gt;                            }&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                            {&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Some gestures like FreeDrag and Flick are registered many, &lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; many times in a single Update frame. Since there is only &lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; one variable to store the gesture info, you must add on&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; any additional gesture values so there is a combination &lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; of all the gesture information in currentGesture&lt;/span&gt;&lt;br/&gt;                                currentGestureDefinition.Delta +=&lt;span style="color: #000000;"&gt; detectedGesture.Delta;&lt;br/&gt;                                currentGestureDefinition.Delta2 &lt;/span&gt;+=&lt;span style="color: #000000;"&gt; detectedGesture.Delta2;&lt;br/&gt;                                currentGestureDefinition.Position &lt;/span&gt;+=&lt;span style="color: #000000;"&gt; detectedGesture.Position;&lt;br/&gt;                                currentGestureDefinition.Position2 &lt;/span&gt;+=&lt;span style="color: #000000;"&gt; detectedGesture.Position2;&lt;br/&gt;                            }&lt;br/&gt;                        }&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (currentGestureDefinition != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsAccelerometerInputPressed()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (KeyValuePair&amp;lt;Direction, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&amp;gt; input &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; accelerometerInputs)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (input.Key)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; Direction.Up:&lt;br/&gt;                        {&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Math.Abs(currentAccelerometerReading.Y) &amp;gt;&lt;span style="color: #000000;"&gt; input.Value&lt;br/&gt;                            &lt;/span&gt;&amp;amp;&amp;amp; currentAccelerometerReading.Y &amp;lt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                            {&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                            }&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        }&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; Direction.Down:&lt;br/&gt;                        {&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Math.Abs(currentAccelerometerReading.Y) &amp;gt;&lt;span style="color: #000000;"&gt; input.Value&lt;br/&gt;                            &lt;/span&gt;&amp;amp;&amp;amp; currentAccelerometerReading.Y &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                            {&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                            }&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        }&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; Direction.Left:&lt;br/&gt;                        {&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Math.Abs(currentAccelerometerReading.X) &amp;gt;&lt;span style="color: #000000;"&gt; input.Value&lt;br/&gt;                            &lt;/span&gt;&amp;amp;&amp;amp; currentAccelerometerReading.X &amp;lt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                            {&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                            }&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        }&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; Direction.Right:&lt;br/&gt;                        {&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Math.Abs(currentAccelerometerReading.X) &amp;gt;&lt;span style="color: #000000;"&gt; input.Value&lt;br/&gt;                            &lt;/span&gt;&amp;amp;&amp;amp; currentAccelerometerReading.X &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                            {&lt;br/&gt;                                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                            }&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        GestureDefinition currentGestureDefinition;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2 CurrentGesturePosition()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (currentGestureDefinition == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2.Zero;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; currentGestureDefinition.Position;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2 CurrentGesturePosition2()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (currentGestureDefinition == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2.Zero;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; currentGestureDefinition.Position2;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2 CurrentGestureDelta()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (currentGestureDefinition == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2.Zero;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; currentGestureDefinition.Delta;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2 CurrentGestureDelta2()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (currentGestureDefinition == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector2.Zero;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; currentGestureDefinition.Delta2;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Vector2?&lt;span style="color: #000000;"&gt; CurrentTouchPosition()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (TouchLocation location &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; CurrentTouchLocationState)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (location.State)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; TouchLocationState.Pressed:&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; location.Position;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; TouchLocationState.Moved:&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; location.Position;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; Vector2?&lt;span style="color: #000000;"&gt; PreviousTouchPosition()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (TouchLocation location &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; PreviousTouchLocationState)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (location.State)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; TouchLocationState.Pressed:&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; location.Position;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; TouchLocationState.Moved:&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; location.Position;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; Rectangle CurrentTouchRectangle&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                Vector2&lt;/span&gt;? touchPosition =&lt;span style="color: #000000;"&gt; CurrentTouchPosition();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (touchPosition == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Rectangle.Empty;&lt;br/&gt;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle((&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)touchPosition.Value.X - &lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br/&gt;                                     (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)touchPosition.Value.Y - &lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br/&gt;                                     &lt;/span&gt;&lt;span style="color: #800080;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br/&gt;                                     &lt;/span&gt;&lt;span style="color: #800080;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Vector3 CurrentAccelerometerReading&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; currentAccelerometerReading;&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;TouchIndicator.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; InputHandlerDemo.Inputs&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 触控轨迹&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; TouchIndicator&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; alphaValue = &lt;span style="color: #800080;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; TouchID;&lt;br/&gt;&lt;br/&gt;        Texture2D touchCircleIndicatorTexture;&lt;br/&gt;        Texture2D touchCrossHairIndicatorTexture;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;轨迹集合&lt;/span&gt;&lt;br/&gt;        List&amp;lt;Vector2&amp;gt; touchPositions = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Vector2&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 初始化触摸轨迹&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="touchID"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="content"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; TouchIndicator(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchID, ContentManager content)&lt;br/&gt;        {&lt;br/&gt;            TouchID &lt;/span&gt;=&lt;span style="color: #000000;"&gt; touchID;&lt;br/&gt;&lt;br/&gt;            touchCircleIndicatorTexture &lt;/span&gt;= content.Load&amp;lt;Texture2D&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Circle&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            touchCrossHairIndicatorTexture &lt;/span&gt;= content.Load&amp;lt;Texture2D&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Crosshair&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; Vector2?&lt;span style="color: #000000;"&gt; TouchPosition(TouchCollection touchLocationState)&lt;br/&gt;        {&lt;br/&gt;            TouchLocation touchLocation;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (touchLocationState.FindById(TouchID, &lt;span style="color: #0000ff;"&gt;out&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchLocation))&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchLocation.Position;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Update(TouchCollection touchLocationState)&lt;br/&gt;        {&lt;br/&gt;            Vector2&lt;/span&gt;? currentPosition =&lt;span style="color: #000000;"&gt; TouchPosition(touchLocationState);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (currentPosition == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (touchPositions.Count &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                {&lt;br/&gt;                    alphaValue &lt;/span&gt;-= &lt;span style="color: #800080;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (alphaValue &amp;lt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                    {&lt;br/&gt;                        touchPositions.Clear();&lt;br/&gt;                        alphaValue &lt;/span&gt;= &lt;span style="color: #800080;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (alphaValue != &lt;span style="color: #800080;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                {&lt;br/&gt;                    touchPositions.Clear();&lt;br/&gt;                    alphaValue &lt;/span&gt;= &lt;span style="color: #800080;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;&lt;br/&gt;                touchPositions.Add((Vector2)currentPosition);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 绘制界面&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="batch"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw(SpriteBatch batch)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (touchPositions.Count != &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                Vector2 previousPosition &lt;/span&gt;= touchPositions[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br/&gt;                Vector2 offsetForCenteringTouchPosition &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(-&lt;span style="color: #800080;"&gt;25&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;绘制触摸的轨迹&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Vector2 aPosition &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchPositions)&lt;br/&gt;                {&lt;br/&gt;                    DrawLine(batch,&lt;br/&gt;                             touchCircleIndicatorTexture,&lt;br/&gt;                             touchCrossHairIndicatorTexture,&lt;br/&gt;                             previousPosition &lt;/span&gt;+&lt;span style="color: #000000;"&gt; offsetForCenteringTouchPosition,&lt;br/&gt;                             aPosition &lt;/span&gt;+&lt;span style="color: #000000;"&gt; offsetForCenteringTouchPosition,&lt;br/&gt;                             &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Color(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;, alphaValue));&lt;br/&gt;&lt;br/&gt;                    previousPosition &lt;/span&gt;=&lt;span style="color: #000000;"&gt; aPosition;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 画线&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="batch"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="lineTexture"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="touchTexture"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="startingPoint"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="endingPoint"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="lineColor"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; DrawLine(SpriteBatch batch, Texture2D lineTexture, Texture2D touchTexture,&lt;br/&gt;              Vector2 startingPoint, Vector2 endingPoint, Color lineColor)&lt;br/&gt;        {&lt;br/&gt;            batch.Draw(touchTexture, startingPoint, lineColor);&lt;br/&gt;&lt;br/&gt;            Vector2 difference &lt;/span&gt;= startingPoint -&lt;span style="color: #000000;"&gt; endingPoint;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; lineLength = difference.Length() / &lt;span style="color: #800080;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; lineLength; i++&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                batch.Draw(lineTexture, startingPoint, lineColor);&lt;br/&gt;                startingPoint.X &lt;/span&gt;-= difference.X /&lt;span style="color: #000000;"&gt; lineLength;&lt;br/&gt;                startingPoint.Y &lt;/span&gt;-= difference.Y /&lt;span style="color: #000000;"&gt; lineLength;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            batch.Draw(touchTexture, endingPoint, lineColor);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;TouchIndicatorCollection.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; InputHandlerDemo.Inputs&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 触控轨迹集合&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; TouchIndicatorCollection&lt;br/&gt;    {&lt;br/&gt;        List&lt;/span&gt;&amp;lt;TouchIndicator&amp;gt; touchPositions = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;TouchIndicator&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 更新游戏界面&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="content"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Update(GameTime gameTime, ContentManager content)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;在XNA中，TouchPanel可以向我们提供大量关于触控操作的信息  获取触控的集合&lt;/span&gt;&lt;br/&gt;            TouchCollection currentTouchLocationState =&lt;span style="color: #000000;"&gt; TouchPanel.GetState();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (TouchLocation location &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; currentTouchLocationState)&lt;br/&gt;            {&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取触控的位置&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; isTouchIDAlreadyStored = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (TouchIndicator indicator &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchPositions)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;如果触控的位置id存在则跳出整个循环&lt;/span&gt;&lt;br/&gt;                    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (location.Id ==&lt;span style="color: #000000;"&gt; indicator.TouchID)&lt;br/&gt;                    {&lt;br/&gt;                        isTouchIDAlreadyStored &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;isTouchIDAlreadyStored)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;加入一个触控的位置&lt;/span&gt;&lt;br/&gt;                    TouchIndicator indicator = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; TouchIndicator(location.Id, content);&lt;br/&gt;                    touchPositions.Add(indicator);&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (TouchIndicator indicator &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchPositions)&lt;br/&gt;            {&lt;br/&gt;                indicator.Update(currentTouchLocationState);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw(SpriteBatch batch)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (TouchIndicator indicator &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchPositions)&lt;br/&gt;            {&lt;br/&gt;                indicator.Draw(batch);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012042423471951.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012042423480748.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/linzheng/aggbug/2469108.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/linzheng/archive/2012/05/27/2469108.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/linzheng/archive/2012/04/15/2450598.html</id><title type="text">XNA游戏：软键盘弹窗输入</title><summary type="text">在XNA中如果我们需要输入文字，那么我们就需要使用到软键盘了，在XNA中使用软键盘要用到Guide.BeginShowKeyboardInput方法，由于游戏的Update是会不断地执行的，所以要由Guide.IsVisible来检查弹出输入框是否已经显示出来了。Guide.BeginShowKeyboardInput方法的参数PlayerIndex 玩家的编号，手机是PlayerIndex.OneTitle 输入窗口的标题Description 输入窗口的描述DefaultText 默认的文字Callback 回调的方法State 使用者想要传送的物件Guide.BeginSho...</summary><published>2012-04-15T12:32:00Z</published><updated>2012-04-15T12:32:00Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450598.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450598.html"/><content type="html">&lt;p&gt;在XNA中如果我们需要输入文字，那么我们就需要使用到软键盘了，在XNA中使用软键盘要用到Guide.BeginShowKeyboardInput方法，由于游戏的Update是会不断地执行的，所以要由Guide.IsVisible来检查弹出输入框是否已经显示出来了。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Guide.BeginShowKeyboardInput方法的参数&lt;/strong&gt;&lt;br /&gt;PlayerIndex &amp;nbsp;&amp;nbsp; &amp;nbsp;玩家的编号，手机是PlayerIndex.One&lt;br /&gt;Title &amp;nbsp;&amp;nbsp; &amp;nbsp;输入窗口的标题&lt;br /&gt;Description &amp;nbsp;&amp;nbsp; &amp;nbsp;输入窗口的描述&lt;br /&gt;DefaultText &amp;nbsp;&amp;nbsp; &amp;nbsp;默认的文字&lt;br /&gt;Callback &amp;nbsp;&amp;nbsp; &amp;nbsp;回调的方法&lt;br /&gt;State &amp;nbsp;&amp;nbsp; &amp;nbsp;使用者想要传送的物件&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Guide.BeginShowMessageBox时弹出一个窗口没有软键盘输入，这个方法的参数分別是&lt;/strong&gt;&lt;br /&gt;Title &amp;nbsp;&amp;nbsp; &amp;nbsp;窗口的标题&lt;br /&gt;Text &amp;nbsp;&amp;nbsp; &amp;nbsp;窗口的文字&lt;br /&gt;Buttons &amp;nbsp;&amp;nbsp; &amp;nbsp;按钮&lt;br /&gt;FoucsButton &amp;nbsp;&amp;nbsp; &amp;nbsp;预设的按钮&lt;br /&gt;Icon &amp;nbsp;&amp;nbsp; &amp;nbsp;图标&lt;br /&gt;Callback &amp;nbsp;&amp;nbsp; &amp;nbsp;回调的方法&lt;br /&gt;State &amp;nbsp;&amp;nbsp; &amp;nbsp;使用者想要传送的物件&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;示例&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Audio;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.GamerServices;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Media;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; SIPSample&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is the main type for your game&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1 : Microsoft.Xna.Framework.Game&lt;br/&gt;    {&lt;br/&gt;        GraphicsDeviceManager graphics;&lt;br/&gt;        SpriteBatch spriteBatch;&lt;br/&gt;&lt;br/&gt;        SpriteFont spriteFont;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sipTitle = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;This is the title.&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sipDescription = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;This is the description that goes beneath the title.&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; sipResult = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;You type stuff here.&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1()&lt;br/&gt;        {&lt;br/&gt;            graphics &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GraphicsDeviceManager(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            Content.RootDirectory &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Content&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            TargetElapsedTime &lt;/span&gt;= TimeSpan.FromTicks(&lt;span style="color: #800080;"&gt;333333&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Initialize()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Initialize();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoadContent()&lt;br/&gt;        {&lt;br/&gt;            spriteBatch &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SpriteBatch(GraphicsDevice);&lt;br/&gt;            spriteFont &lt;/span&gt;= Content.Load&amp;lt;SpriteFont&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SpriteFont1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; UnloadContent()&lt;br/&gt;        {&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 输入完成回调方法&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="result"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; keyboardCallback(IAsyncResult result)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; retval =&lt;span style="color: #000000;"&gt; Guide.EndShowKeyboardInput(result);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (retval != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                sipResult &lt;/span&gt;=&lt;span style="color: #000000;"&gt; retval;&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Update(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (GamePad.GetState(PlayerIndex.One).Buttons.Back ==&lt;span style="color: #000000;"&gt; ButtonState.Pressed)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Exit();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Display the SIP&lt;/span&gt;&lt;br/&gt;            TouchCollection touchCollection =&lt;span style="color: #000000;"&gt; TouchPanel.GetState();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (TouchLocation touch &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchCollection)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (touch.State ==&lt;span style="color: #000000;"&gt; TouchLocationState.Pressed)&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;Guide.IsVisible)&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;弹出软键盘输入框&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                        Guide.BeginShowKeyboardInput(PlayerIndex.One, sipTitle, sipDescription,&lt;br/&gt;                            sipResult, keyboardCallback, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;());&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Update(gameTime);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            GraphicsDevice.Clear(Color.CornflowerBlue);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;绘制界面的文字&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            spriteBatch.Begin();&lt;br/&gt;            spriteBatch.DrawString(spriteFont, sipResult, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2 { X = &lt;span style="color: #800080;"&gt;50&lt;/span&gt;, Y = &lt;span style="color: #800080;"&gt;200&lt;/span&gt;&lt;span style="color: #000000;"&gt; }, Color.Black);&lt;br/&gt;            spriteBatch.End();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Draw(gameTime);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012041520311696.jpg" alt="" width="311" height="519" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/linzheng/aggbug/2450598.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450598.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/linzheng/archive/2012/04/15/2450554.html</id><title type="text">XNA游戏：手势触控</title><summary type="text">在XNA游戏中使用到手势触控操作时，需要引入using Microsoft.Xna.Framework.Input.Touch; 空间，在该空间下下面两个类在触控编程中会用到。TouchLocation 用来保存某一个触摸点的状态信息。TouchCollection 是保存了当前所有触控状态（TouchLocation）的集合。当我们把一个指头在屏幕上操作，可能会有这样三种动作：按，移动，移开。那么这三个操作在WP7的XNA里如何获取呢？我们就需要了解XNA里的TouchPanel和TouchCollection这两个类 TouchCollection touchState= T...</summary><published>2012-04-15T11:30:00Z</published><updated>2012-04-15T11:30:00Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450554.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450554.html"/><content type="html">&lt;p&gt;在XNA游戏中使用到手势触控操作时，需要引入using Microsoft.Xna.Framework.Input.Touch; &lt;br /&gt;&lt;br /&gt;空间，在该空间下下面两个类在触控编程中会用到。&lt;br /&gt;&lt;strong&gt;TouchLocation 用来保存某一个触摸点的状态信息。&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;TouchCollection&amp;nbsp; 是保存了当前所有触控状态（TouchLocation）的集合。&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;当我们把一个指头在屏幕上操作，可能会有这样三种动作：按，移动，移开。那么这三个操作在WP7的XNA里如何获取呢？我们就需要了解XNA里的TouchPanel和TouchCollection这两个类&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        TouchCollection touchState=&lt;span style="color: #000000;"&gt; TouchPanel.GetState();&lt;br/&gt;        Foreach(TouchLocation location &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchState)&lt;br/&gt;        {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt;(location.State)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; TouchLocationState.Pressed:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;按下&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                     &amp;hellip;&amp;hellip;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; TouchLocationState.Moved:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;移动&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                     &amp;hellip;&amp;hellip;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; TouchLocationState.Released:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;释放&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                     &amp;hellip;&amp;hellip;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;TouchLocation ：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; State&amp;nbsp; 触摸状态，包含4个状态&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt; TouchLocationState.Pressed 表示屏幕被触摸时手指按下的一瞬间&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt; TouchLocationState.Moved 表示手指按下后正在移动，经过测试可知，在手指按下的一瞬间State为Pressed ，在手指按下后抬起前这段时间内的状态均是Moved&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt; TouchLocationState.Invalid 无效状态&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt; TouchLocationState.Released 表示手指抬起的一瞬间&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID 表示当前触摸事件的ID，一个完成的触控事件的过程应该是&amp;ldquo;Pressed&amp;nbsp; -&amp;gt; Moved&amp;nbsp; -&amp;gt; Released &amp;rdquo;在这个过程中ID是一致的，用来在多点触摸时区分触摸的每个点。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Position 触摸位置，包含两个属性&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt; X 当前触摸位置的X轴坐标&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt; Y 当前触摸位置的Y轴坐标&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; （横屏全屏情况下，屏幕的左上角坐标为（0，0）右下角坐标为（800,480））&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;和触控操作类似的还有叫&amp;ldquo;手势&amp;rdquo;的，也算复杂的触控吧。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;TouchPanel.EnabledGestures = GestureType.FreeDrag;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;用来指定手势，必须要先设定，否则&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;报错&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (TouchPanel.EnabledGestures !=&lt;span style="color: #000000;"&gt; GestureType.None)&lt;br/&gt;{&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (TouchPanel.ReadGesture())&lt;br/&gt;{&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.Tap: &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;单击&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.DoubleTap:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;双击&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.FreeDrag:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;自由拖动&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.DragComplete:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;拖动完成&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.Flick:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;轻弹&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.Hold:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;按住不动&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.HorizontalDrag:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;横向拖动&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.None:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;无手势&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.Pinch:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;捏&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.PinchComplete:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;捏完&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; GestureType.VerticalDrag:&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;纵向拖动&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;}&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;示例一各种手势的测试：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Audio;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.GamerServices;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Media;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; Gestures&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is the main type for your game&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1 : Microsoft.Xna.Framework.Game&lt;br/&gt;    {&lt;br/&gt;        GraphicsDeviceManager graphics;&lt;br/&gt;        SpriteBatch spriteBatch;&lt;br/&gt;&lt;br/&gt;        SpriteFont spriteFont;&lt;br/&gt;&lt;br/&gt;        String message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Do something&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        Vector2 messagePos &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Vector2.Zero;&lt;br/&gt;        Color color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Black;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1()&lt;br/&gt;        {&lt;br/&gt;            graphics &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GraphicsDeviceManager(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            Content.RootDirectory &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Content&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Frame rate is 30 fps by default for Windows Phone.&lt;/span&gt;&lt;br/&gt;            TargetElapsedTime = TimeSpan.FromTicks(&lt;span style="color: #800080;"&gt;333333&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to perform any initialization it needs to before starting to run.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is where it can query for any required services and load any non-graphic&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; related content.  Calling base.Initialize will enumerate through any components&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; and initialize them as well.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Initialize()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加各种手势的支持&lt;/span&gt;&lt;br/&gt;            TouchPanel.EnabledGestures = GestureType.Tap | GestureType.DoubleTap | GestureType.Hold |&lt;span style="color: #000000;"&gt; GestureType.HorizontalDrag&lt;br/&gt;                &lt;/span&gt;| GestureType.VerticalDrag | GestureType.FreeDrag | GestureType.DragComplete |&lt;span style="color: #000000;"&gt; GestureType.Pinch&lt;br/&gt;                &lt;/span&gt;| GestureType.PinchComplete |&lt;span style="color: #000000;"&gt; GestureType.Flick;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Initialize();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; LoadContent will be called once per game and is the place to load&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; all of your content.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Create a new SpriteBatch, which can be used to draw textures.&lt;/span&gt;&lt;br/&gt;            spriteBatch = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SpriteBatch(GraphicsDevice);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;记载字体资源&lt;/span&gt;&lt;br/&gt;            spriteFont = Content.Load&amp;lt;SpriteFont&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SpriteFont1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; UnloadContent will be called once per game and is the place to unload&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; all content.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; UnloadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Unload any non ContentManager content here&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to run logic such as updating the world,&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; checking for collisions, gathering input, and playing audio.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Update(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to exit&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (GamePad.GetState(PlayerIndex.One).Buttons.Back ==&lt;span style="color: #000000;"&gt; ButtonState.Pressed)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Exit();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;判断手势的类别&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (TouchPanel.IsGestureAvailable)&lt;br/&gt;            {&lt;br/&gt;                GestureSample gesture &lt;/span&gt;=&lt;span style="color: #000000;"&gt; TouchPanel.ReadGesture();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (gesture.GestureType)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType.Tap:&lt;br/&gt;                        message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;That was a Tap&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Red;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType.DoubleTap:&lt;br/&gt;                        message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;That was a Double Tap&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Orange;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType.Hold:&lt;br/&gt;                        message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;That was a Hold&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Yellow;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType.HorizontalDrag:&lt;br/&gt;                        message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;That was a Horizontal Drag&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Blue;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType.VerticalDrag:&lt;br/&gt;                        message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;That was a Vertical Drag&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Indigo;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType.FreeDrag:&lt;br/&gt;                        message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;That was a Free Drag&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Green;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType.DragComplete:&lt;br/&gt;                        message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Drag gesture complete&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Gold;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType.Flick:&lt;br/&gt;                        message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;That was a Flick&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Violet;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType.Pinch:&lt;br/&gt;                        message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;That was a Pinch&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Violet;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; GestureType.PinchComplete:&lt;br/&gt;                        message &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Pinch gesture complete&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        color &lt;/span&gt;=&lt;span style="color: #000000;"&gt; Color.Silver;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;&lt;br/&gt;                messagePos &lt;/span&gt;=&lt;span style="color: #000000;"&gt; gesture.Position;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Update(gameTime);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is called when the game should draw itself.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            GraphicsDevice.Clear(Color.CornflowerBlue);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;绘制屏幕的文字&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            spriteBatch.Begin();&lt;br/&gt;            spriteBatch.DrawString(spriteFont, message, messagePos, color);&lt;br/&gt;            spriteBatch.End();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Draw(gameTime);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;示例二多点触控的测试：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Audio;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.GamerServices;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Media;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; MultiTouchMe&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is the main type for your game&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1 : Microsoft.Xna.Framework.Game&lt;br/&gt;    {&lt;br/&gt;        GraphicsDeviceManager graphics;&lt;br/&gt;        SpriteBatch spriteBatch;&lt;br/&gt;&lt;br/&gt;        SpriteFont spriteFont;&lt;br/&gt;        TouchCollection touchCollection;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1()&lt;br/&gt;        {&lt;br/&gt;            graphics &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GraphicsDeviceManager(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            Content.RootDirectory &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Content&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Frame rate is 30 fps by default for Windows Phone.&lt;/span&gt;&lt;br/&gt;            TargetElapsedTime = TimeSpan.FromTicks(&lt;span style="color: #800080;"&gt;333333&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to perform any initialization it needs to before starting to run.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is where it can query for any required services and load any non-graphic&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; related content.  Calling base.Initialize will enumerate through any components&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; and initialize them as well.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Initialize()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Add your initialization logic here&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Initialize();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; LoadContent will be called once per game and is the place to load&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; all of your content.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Create a new SpriteBatch, which can be used to draw textures.&lt;/span&gt;&lt;br/&gt;            spriteBatch = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SpriteBatch(GraphicsDevice);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: use this.Content to load your game content here&lt;/span&gt;&lt;br/&gt;            spriteFont = Content.Load&amp;lt;SpriteFont&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SpriteFont1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; UnloadContent will be called once per game and is the place to unload&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; all content.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; UnloadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Unload any non ContentManager content here&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to run logic such as updating the world,&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; checking for collisions, gathering input, and playing audio.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Update(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to exit&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (GamePad.GetState(PlayerIndex.One).Buttons.Back ==&lt;span style="color: #000000;"&gt; ButtonState.Pressed)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Exit();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Add your update logic here&lt;/span&gt;&lt;br/&gt;            touchCollection =&lt;span style="color: #000000;"&gt; TouchPanel.GetState();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Update(gameTime);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is called when the game should draw itself.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            GraphicsDevice.Clear(Color.CornflowerBlue);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Add your drawing code here&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            spriteBatch.Begin();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (TouchLocation touch &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; touchCollection)&lt;br/&gt;                spriteBatch.DrawString(spriteFont, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ID: &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + touch.Id.ToString() + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; (&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; +&lt;span style="color: #000000;"&gt;&lt;br/&gt;                    (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)touch.Position.X + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)touch.Position.Y + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;)&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, touch.Position, Color.White);&lt;br/&gt;&lt;br/&gt;            spriteBatch.End();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Draw(gameTime);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/linzheng/aggbug/2450554.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450554.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/linzheng/archive/2012/04/15/2450274.html</id><title type="text">XNA游戏：横竖屏设置</title><summary type="text">手机设备里面，会有横竖屏的状态，一般会有3种情况，一个中是竖屏，一个是右横屏，一个是左横屏，横屏的设置是通过GraphicsDeviceManager类的SupportedOrientations属性来设置的，GraphicsDeviceManager类在XNA类库介绍中提到的该类型是非常重要的。它为开发者提供方法来管理目标设备的显卡资源。简单地说就是调用显卡的一个接口，该对象的GraphicsDevice属性代表当前目标设备的显卡。示例：using System;using System.Collections.Generic;using System.Linq;using Microsof</summary><published>2012-04-15T07:46:00Z</published><updated>2012-04-15T07:46:00Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450274.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450274.html"/><content type="html">&lt;p&gt;手机设备里面，会有横竖屏的状态，一般会有3种情况，一个中是竖屏，一个是右横屏，一个是左横屏，横屏的设置是通过GraphicsDeviceManager类的SupportedOrientations属性来设置的，GraphicsDeviceManager类在XNA类库介绍中提到的该类型是非常重要的。它为开发者提供方法来管理目标设备的显卡资源。简单地说就是调用显卡的一个接口，该对象的GraphicsDevice属性代表当前目标设备的显卡。&lt;/p&gt;&lt;p&gt;示例：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Audio;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.GamerServices;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Media;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; RotationSample&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is the main type for your game&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1 : Microsoft.Xna.Framework.Game&lt;br/&gt;    {&lt;br/&gt;        GraphicsDeviceManager graphics;&lt;br/&gt;        SpriteBatch spriteBatch;&lt;br/&gt;        SpriteFont rotationFont;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1()&lt;br/&gt;        {&lt;br/&gt;            graphics &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GraphicsDeviceManager(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            Content.RootDirectory &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Content&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Frame rate is 30 fps by default for Windows Phone.&lt;/span&gt;&lt;br/&gt;            TargetElapsedTime = TimeSpan.FromTicks(&lt;span style="color: #800080;"&gt;333333&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加横屏和竖屏的支持&lt;/span&gt;&lt;br/&gt;            graphics.SupportedOrientations = DisplayOrientation.Portrait | DisplayOrientation.LandscapeLeft |&lt;span style="color: #000000;"&gt; DisplayOrientation.LandscapeRight;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to perform any initialization it needs to before starting to run.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is where it can query for any required services and load any non-graphic&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; related content.  Calling base.Initialize will enumerate through any components&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; and initialize them as well.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Initialize()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Add your initialization logic here&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Initialize();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; LoadContent will be called once per game and is the place to load&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; all of your content.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Create a new SpriteBatch, which can be used to draw textures.&lt;/span&gt;&lt;br/&gt;            spriteBatch = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SpriteBatch(GraphicsDevice);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: use this.Content to load your game content here&lt;/span&gt;&lt;br/&gt;            rotationFont = Content.Load&amp;lt;SpriteFont&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;rotationFont&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; UnloadContent will be called once per game and is the place to unload&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; all content.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; UnloadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Unload any non ContentManager content here&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to run logic such as updating the world,&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; checking for collisions, gathering input, and playing audio.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Update(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to exit&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (GamePad.GetState(PlayerIndex.One).Buttons.Back ==&lt;span style="color: #000000;"&gt; ButtonState.Pressed)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Exit();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Update(gameTime);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is called when the game should draw itself.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            GraphicsDevice.Clear(Color.CornflowerBlue);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Add your drawing code here&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            spriteBatch.Begin();&lt;br/&gt;            spriteBatch.DrawString(rotationFont, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;你现在手机的摆放状态是：&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + Window.CurrentOrientation.ToString() + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;50&lt;/span&gt;, &lt;span style="color: #800080;"&gt;50&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.White);&lt;br/&gt;            spriteBatch.End();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Draw(gameTime);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/linzheng/aggbug/2450274.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450274.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/linzheng/archive/2012/04/15/2450218.html</id><title type="text">XNA游戏：重力感应</title><summary type="text">Windows Phone XNA游戏提供的重力传感器可以利用量测重力的原理判手机移动的方向，允许使用者利用摇动或甩动手机的方式控制游戏的执行，其原理和汽车的安全气囊相同，在侦测到汽车快速减速的时候立刻充气以保护驾驶人与乘客不会受伤。要使用重力传感器当做游戏程序的输入，以 XNA 为基础的游戏程序可以利用 Accelerometer 类别提供的功能启用/停用重力加速器，取得重力加速器的状态，以及处理重力加速器引发的事件。Accelerometer 类别常用的属性属性名称说明State管理重力加速器状态的属性，其型态为 SensorState 列举型态。有关 SensorState 列举型态合法</summary><published>2012-04-15T07:14:00Z</published><updated>2012-04-15T07:14:00Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450218.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450218.html"/><content type="html">&lt;p align="left"&gt;Windows Phone XNA游戏提供的重力传感器可以利用量测重力的原理判手机移动的方向，允许使用者利用摇动或甩动手机的方式控制游戏的执行，其原理和汽车的安全气囊相同，在侦测到汽车快速减速的时候立刻充气以保护驾驶人与乘客不会受伤。要使用重力传感器当做游戏程序的输入，以 XNA 为基础的游戏程序可以利用 Accelerometer 类别提供的功能启用/停用重力加速器，取得重力加速器的状态，以及处理重力加速器引发的事件。&lt;/p&gt;&lt;p align="left"&gt;Accelerometer 类别常用的属性&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;属性名称&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;说明&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;State&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;管理重力加速器状态的属性，其型态为 SensorState 列举型态。有关 SensorState 列举型态合法的内容值可以参考表4 的说明。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align="left"&gt;&lt;br /&gt;Accelerometer 类别常用的方法&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;方法名称&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;说明&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;Start&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;开始从重力加速器读取数据。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;Stop&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;结束从重力加速器读取数据。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align="left"&gt;&lt;br /&gt;Accelerometer 类别常用的事件&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;事件名称&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;说明&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;ReadingChanged&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;当重力加速器读取到数据时会引发的事件。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;处理 ReadingChanged 事件的事件处理程序的第二个参数的型态为 AccelerometerReadingEventArgs 类别，其 X、Y、与 X 属性的内容值代表智能型手机在 X 轴、Y 轴、和 Z 轴的加速方向，而不是三度空间的坐标，其单位为重力单位，也就是 G 力 (1G = 9.81 m/s2)。除了 X、Y、与 Z 三个属性以外，还有一个名称为 Timestamp 的属性，负责记录重力加速器读取数据的时间点。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012041515012484.png" alt="" /&gt;&lt;/p&gt;&lt;p align="left"&gt;请注意当手机放在平坦的桌面上，而且正面朝上的时候，AccelerometerReadingEventArgs 类别的 Z 字段的内容值会是 -1.0，表示 Z 轴承受 -1G 的重力，而当手机放在平坦的桌面上，而且正面朝下的时候，AccelerometerReadingEventArgs 类别的 Z 字段的内容值就会是 +1.0，表示 Z 轴承受 1G 的重力。&lt;/p&gt;&lt;p align="left"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;strong&gt;说明]&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;透过 Accelerometer 类别的 State 属性取得的重力加速器状态是 SensorState 列举型态的数据，其合法的内容值请参考表 的说明：&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;内容值名称&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;说明&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;NotSupported&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;未支持重力加速器。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;Ready&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;重力加速器处于可以处理数据的状态。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;Initializing&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;重力加速器正在初始化。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;NoData&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;未支持重力加速器。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;NoPermissions&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;呼叫者没有权限取用重力加速器接收到的数据。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;Disabled&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;重力加速器处于禁用的状态。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;要使用重力加速器判断智能型手机加速的方向，首先您必须使用鼠标的右键点中 [Solution Explorer] 窗口中的项目名称，从出现的菜单选择 [Add Reference] 功能，然后于出现的窗口中选择名称为 Microsoft.Devices.Sensors 的组件，添加引用上去。&lt;/p&gt;&lt;p&gt;下面看一个例子：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Windows;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Audio;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.GamerServices;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Media;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Devices.Sensors;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; AccelerometerSample&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is the main type for your game&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1 : Microsoft.Xna.Framework.Game&lt;br/&gt;    {&lt;br/&gt;        GraphicsDeviceManager graphics;&lt;br/&gt;        SpriteBatch spriteBatch;&lt;br/&gt;        SpriteFont readingsFont;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;字体资源&lt;/span&gt;&lt;br/&gt;        Accelerometer accelerometer;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;重力加速器&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;span style="color: #000000;"&gt; X;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;span style="color: #000000;"&gt; Y;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;span style="color: #000000;"&gt; Z;&lt;br/&gt;        &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1()&lt;br/&gt;        {&lt;br/&gt;            graphics &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GraphicsDeviceManager(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            Content.RootDirectory &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Content&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Frame rate is 30 fps by default for Windows Phone.&lt;/span&gt;&lt;br/&gt;            TargetElapsedTime = TimeSpan.FromTicks(&lt;span style="color: #800080;"&gt;333333&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to perform any initialization it needs to before starting to run.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is where it can query for any required services and load any non-graphic&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; related content.  Calling base.Initialize will enumerate through any components&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; and initialize them as well.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Initialize()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Add your initialization logic here&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;初始化重力加速器&lt;/span&gt;&lt;br/&gt;            accelerometer = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Accelerometer();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;读取重力改变事件&lt;/span&gt;&lt;br/&gt;            accelerometer.ReadingChanged += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; EventHandler&amp;lt;AccelerometerReadingEventArgs&amp;gt;&lt;span style="color: #000000;"&gt;(AccelerometerReadingChanged);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;开始其中重力加速器&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            accelerometer.Start();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Initialize();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; LoadContent will be called once per game and is the place to load&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; all of your content.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Create a new SpriteBatch, which can be used to draw textures.&lt;/span&gt;&lt;br/&gt;            spriteBatch = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SpriteBatch(GraphicsDevice);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: use this.Content to load your game content here&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;加载字体资源&lt;/span&gt;&lt;br/&gt;            readingsFont = Content.Load&amp;lt;SpriteFont&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;readings&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; UnloadContent will be called once per game and is the place to unload&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; all content.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; UnloadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Unload any non ContentManager content here&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            accelerometer.Stop();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to run logic such as updating the world,&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; checking for collisions, gathering input, and playing audio.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Update(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to exit&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (GamePad.GetState(PlayerIndex.One).Buttons.Back ==&lt;span style="color: #000000;"&gt; ButtonState.Pressed)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Exit();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Add your update logic here&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Update(gameTime);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is called when the game should draw itself.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            GraphicsDevice.Clear(Color.CornflowerBlue);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Add your drawing code here&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            spriteBatch.Begin();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;绘制文字&lt;/span&gt;&lt;br/&gt;            spriteBatch.DrawString(readingsFont, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;X: &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + X.ToString(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;0.00&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;), &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;50&lt;/span&gt;, &lt;span style="color: #800080;"&gt;50&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.White);&lt;br/&gt;            spriteBatch.DrawString(readingsFont, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Y: &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + Y.ToString(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;0.00&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;), &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;50&lt;/span&gt;, &lt;span style="color: #800080;"&gt;75&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.White);&lt;br/&gt;            spriteBatch.DrawString(readingsFont, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Z: &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + Z.ToString(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;0.00&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;), &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;50&lt;/span&gt;, &lt;span style="color: #800080;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.White);&lt;br/&gt;            spriteBatch.End();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Draw(gameTime);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AccelerometerReadingChanged(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, AccelerometerReadingEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;触发UI更新&lt;/span&gt;&lt;br/&gt;            Deployment.Current.Dispatcher.BeginInvoke(() =&amp;gt;&lt;span style="color: #000000;"&gt; NewReading(e));&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;赋值XYZ的值&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; NewReading(AccelerometerReadingEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            X &lt;/span&gt;=&lt;span style="color: #000000;"&gt; e.X;&lt;br/&gt;            Y &lt;/span&gt;=&lt;span style="color: #000000;"&gt; e.Y;&lt;br/&gt;            Z &lt;/span&gt;=&lt;span style="color: #000000;"&gt; e.Z;&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012041515133317.jpg" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/linzheng/aggbug/2450218.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/linzheng/archive/2012/04/15/2450218.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/linzheng/archive/2012/04/10/2441521.html</id><title type="text">XNA游戏：Bizzy Bees蜜蜂警官游戏</title><summary type="text">先来看一下游戏的界面游戏的思路差不多像俄罗斯方块一样，上面的花一直往下掉，然后你就需要选中一只蜜蜂来吃上面的花，当蜜蜂的颜色和花的颜色一样或者花是彩色的花的时候，花就会被蜜蜂给吃掉，这时候这只蜜蜂也会被随机生成一只新的蜜蜂。当吃掉一朵彩色的花的时候，会增加一分，当花落到了底下的时候游戏结束。看一下下面的代码：花的对象Flower.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DemoGame{ class Flower { pu...</summary><published>2012-04-10T15:20:00Z</published><updated>2012-04-10T15:20:00Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/linzheng/archive/2012/04/10/2441521.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/archive/2012/04/10/2441521.html"/><content type="html">&lt;p&gt;先来看一下游戏的界面&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-89-metablogapi/3718.done_5F00_5D6337BA.png"&gt;&lt;img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="done" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-89-metablogapi/0741.done_5F00_thumb_5F00_52E2639A.png" alt="done" width="292" height="484" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;游戏的思路差不多像俄罗斯方块一样，上面的花一直往下掉，然后你就需要选中一只蜜蜂来吃上面的花，当蜜蜂的颜色和花的颜色一样或者花是彩色的花的时候，花就会被蜜蜂给吃掉，这时候这只蜜蜂也会被随机生成一只新的蜜蜂。当吃掉一朵彩色的花的时候，会增加一分，当花落到了底下的时候游戏结束。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;看一下下面的代码：&lt;/p&gt;&lt;p&gt;花的对象&lt;/p&gt;&lt;p&gt;Flower.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Text;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; DemoGame&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Flower&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; Color;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;颜色&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; X;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;X轴坐标&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; Y;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Y轴坐标&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Flower(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; color, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; x, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt; y)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.Color =&lt;span style="color: #000000;"&gt; color;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.X =&lt;span style="color: #000000;"&gt; x;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.Y =&lt;span style="color: #000000;"&gt; y;&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;花的列容器&lt;/p&gt;&lt;p&gt;Column.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Text;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; DemoGame&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Column&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; columnTop = &lt;span style="color: #800080;"&gt;150&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;列头高度，当花移动出这个高度后将开始新增新花&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; numberOfFlowerColors = &lt;span style="color: #800080;"&gt;6&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;花颜色的数量&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; rainbowFlowerColor = &lt;span style="color: #800080;"&gt;6&lt;/span&gt;; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;彩虹花的颜色&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; flowerDeltaY = &lt;span style="color: #800080;"&gt;80&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; flowerWidth = &lt;span style="color: #800080;"&gt;72&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;花的宽度&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; flowerHeight = &lt;span style="color: #800080;"&gt;72&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;花的高度&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; columnBottom = &lt;span style="color: #800080;"&gt;620&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;列的高度 用来判断花是否移动到底了&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; List&amp;lt;Flower&amp;gt; flowers = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;花的集合&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; SpriteBatch spriteBatch;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;绘制花&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; x;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;花的X轴，X轴的坐标是固定的&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; Random r;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; Texture2D flowerMap;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;花的纹理&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; Velocity = &lt;span style="color: #800080;"&gt;0.4f&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;速度&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 判断是否有花移动到底&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; ReachedBottom&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (flowers.Count != &lt;span style="color: #800080;"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; flowers[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Y &amp;gt;=&lt;span style="color: #000000;"&gt; columnBottom)&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br/&gt;                    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 初始化一列&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="content"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;当前的ContentManager&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="spriteBatch"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;当前的SpriteBatch&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="x"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="seed"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Column(ContentManager content, SpriteBatch spriteBatch, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; x, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; seed)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.spriteBatch =&lt;span style="color: #000000;"&gt; spriteBatch;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.x =&lt;span style="color: #000000;"&gt; x;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.flowers = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Flower&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.r = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Random(seed);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.flowerMap = content.Load&amp;lt;Texture2D&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;flowermap&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;初始化 添加3朵花&lt;/span&gt;&lt;br/&gt;            AddRandomFlower(x, columnTop + &lt;span style="color: #800080;"&gt;2&lt;/span&gt; *&lt;span style="color: #000000;"&gt; flowerDeltaY);&lt;br/&gt;            AddRandomFlower(x, columnTop &lt;/span&gt;+&lt;span style="color: #000000;"&gt; flowerDeltaY);&lt;br/&gt;            AddRandomFlower(x, columnTop);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 随机添加一朵花&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="x"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="y"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddRandomFlower(&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; x, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; y)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; color = r.Next(numberOfFlowerColors+&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            flowers.Add(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Flower(color, x, y));&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 在spriteBatch中绘制花精灵&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Flower flower &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; flowers)&lt;br/&gt;            {&lt;br/&gt;                spriteBatch.Draw(flowerMap, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(flower.X, flower.Y), &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle(flower.Color * flowerWidth, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, flowerWidth, flowerHeight), Color.White);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 更新列&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Update()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Flower f &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; flowers)&lt;br/&gt;            {&lt;br/&gt;                f.Y &lt;/span&gt;+= Velocity;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;增加Y轴的偏移量，表示正在向下移动&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;如果最上面的花已经全部离开顶部，则需要随机生成新的花从上面下来&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (flowers.Count == &lt;span style="color: #800080;"&gt;0&lt;/span&gt; || flowers[flowers.Count - &lt;span style="color: #800080;"&gt;1&lt;/span&gt;].Y &amp;gt;&lt;span style="color: #000000;"&gt; columnTop)&lt;br/&gt;                AddRandomFlower(x, columnTop &lt;/span&gt;-&lt;span style="color: #000000;"&gt; flowerDeltaY);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取最底下的一朵花&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Flower GetBottomFlower()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (flowers.Count &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; flowers[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 移走最底下的一朵花&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; RemoveBottomFlower()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (flowers.Count &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                flowers.RemoveAt(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;蜜蜂对象&lt;br /&gt;Bee.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Text;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; DemoGame&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Bee&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; Color;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;蜜蜂颜色&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; IsSelected = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;是否选中&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Bee(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; color)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.Color =&lt;span style="color: #000000;"&gt; color;&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;蜜蜂容器&lt;br /&gt;BeePicker.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Text;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; DemoGame&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; BeePicker&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; beeDeltaX = &lt;span style="color: #800080;"&gt;96&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; beeStartX = &lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; beeStartY = &lt;span style="color: #800080;"&gt;700&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; numberOfBeeColors = &lt;span style="color: #800080;"&gt;5&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;蜜蜂颜色的数量&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; List&amp;lt;Bee&amp;gt; bees = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;蜜蜂集合&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; SpriteBatch spriteBatch;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; Texture2D beeMap;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; Random r;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; BeePicker(ContentManager content, SpriteBatch spriteBatch, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; seed)&lt;br/&gt;        {&lt;br/&gt;            beeMap &lt;/span&gt;= content.Load&amp;lt;Texture2D&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;beemap&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.spriteBatch =&lt;span style="color: #000000;"&gt; spriteBatch;&lt;br/&gt;            bees &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Bee&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;            r &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Random(seed);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; &lt;span style="color: #800080;"&gt;5&lt;/span&gt;; i++&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                AddRandomBee();&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 添加一只蜜蜂&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; AddRandomBee()&lt;br/&gt;        {&lt;br/&gt;            bees.Add(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Bee(r.Next(numberOfBeeColors + &lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)));&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 绘制蜜蜂&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; &lt;span style="color: #800080;"&gt;5&lt;/span&gt;; i++&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(bees[i].IsSelected)                    &lt;br/&gt;                    spriteBatch.Draw(beeMap, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(beeStartX + i * beeDeltaX, beeStartY), &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle(bees[i].Color * &lt;span style="color: #800080;"&gt;91&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;91&lt;/span&gt;, &lt;span style="color: #800080;"&gt;91&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.DimGray);&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                    spriteBatch.Draw(beeMap, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(beeStartX + i * beeDeltaX, beeStartY), &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle(bees[i].Color * &lt;span style="color: #800080;"&gt;91&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;91&lt;/span&gt;, &lt;span style="color: #800080;"&gt;91&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.White);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 选中一只蜜蜂&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="x"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; MarkSelectedBee(&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt; x)&lt;br/&gt;        {&lt;br/&gt;            GetSelectedBee(x).IsSelected &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取选中的蜜蜂&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="x"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Bee GetSelectedBee(&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt; x)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; index = (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)(x /&lt;span style="color: #000000;"&gt; beeDeltaX);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; bees[index];&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 移除和替换蜜蜂&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="selectedBee"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="availableFlowers"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; RemoveAndReplaceBee(Bee selectedBee, List&amp;lt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt; availableFlowers)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; beeIndex =&lt;span style="color: #000000;"&gt; bees.IndexOf(selectedBee);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;check if we already have a bee that matches the available flowers &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;remember to skip over the selectedBee since it will be removed in a moment&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; match = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; rainbowColor = &lt;span style="color: #800080;"&gt;6&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;if there is a rainbow flower it will always match&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (availableFlowers.Contains(rainbowColor))&lt;br/&gt;                match &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; bees.Count; i++&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(i != beeIndex &amp;amp;&amp;amp;&lt;span style="color: #000000;"&gt; availableFlowers.Contains(bees[i].Color)){&lt;br/&gt;                        match &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; color;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(match){&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;we already have a match, just add a random colored bee&lt;/span&gt;&lt;br/&gt;                color = r.Next(numberOfBeeColors + &lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt; );&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;we have no match so we must pick a color from the available colors&lt;/span&gt;&lt;br/&gt;                color =&lt;span style="color: #000000;"&gt; availableFlowers[r.Next(availableFlowers.Count)];&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;set the selected bee to the new color to "create" a new bee&lt;/span&gt;&lt;br/&gt;            bees[beeIndex].Color =&lt;span style="color: #000000;"&gt; color;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; DeselectAll()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Bee bee &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; bees)&lt;br/&gt;                bee.IsSelected &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;游戏主程序&lt;br /&gt;Game1.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Audio;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Content;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.GamerServices;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Graphics;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Input.Touch;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.Xna.Framework.Media;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; DemoGame&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is the main type for your game&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1 : Microsoft.Xna.Framework.Game&lt;br/&gt;    {&lt;br/&gt;        GraphicsDeviceManager graphics;&lt;br/&gt;        SpriteBatch spriteBatch;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;纹理&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;        Texture2D backgroundTexture;&lt;br/&gt;        Texture2D foregroundTexture;&lt;br/&gt;        Texture2D hudTexture;&lt;br/&gt;        Texture2D flowerMapTexture;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;分数&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; score = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;字体&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;        SpriteFont largeFont;&lt;br/&gt;        SpriteFont mediumFont;&lt;br/&gt;        SpriteFont smallFont;&lt;br/&gt;&lt;br/&gt;        List&lt;/span&gt;&amp;lt;Column&amp;gt; columns;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;列集合&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; gameOver = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;标记游戏是否结束&lt;/span&gt;&lt;br/&gt;        BeePicker beePicker = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;蜜蜂处理类&lt;/span&gt;&lt;br/&gt;        Bee selectedBee = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;蜜蜂&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Game1()&lt;br/&gt;        {&lt;br/&gt;            graphics &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GraphicsDeviceManager(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置游戏图像的宽和高&lt;/span&gt;&lt;br/&gt;            graphics.PreferredBackBufferHeight = &lt;span style="color: #800080;"&gt;800&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            graphics.PreferredBackBufferWidth &lt;/span&gt;= &lt;span style="color: #800080;"&gt;480&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            Content.RootDirectory &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Content&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Frame rate is 30 fps by default for Windows Phone.&lt;/span&gt;&lt;br/&gt;            TargetElapsedTime = TimeSpan.FromTicks(&lt;span style="color: #800080;"&gt;333333&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Extend battery life under lock.&lt;/span&gt;&lt;br/&gt;            InactiveSleepTime = TimeSpan.FromSeconds(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 初始化&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Initialize()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Add your initialization logic here&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加触摸事件&lt;/span&gt;&lt;br/&gt;            TouchPanel.EnabledGestures =&lt;span style="color: #000000;"&gt; GestureType.Tap;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Initialize();&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 加载资源&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建一个新的SpriteBatch用来绘制纹理&lt;/span&gt;&lt;br/&gt;            spriteBatch = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SpriteBatch(GraphicsDevice);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;加载纹理&lt;/span&gt;&lt;br/&gt;            backgroundTexture = Content.Load&amp;lt;Texture2D&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GameScreenBackground&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            foregroundTexture &lt;/span&gt;= Content.Load&amp;lt;Texture2D&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GameScreenForeground&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            hudTexture &lt;/span&gt;= Content.Load&amp;lt;Texture2D&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;HUDBackground&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            flowerMapTexture &lt;/span&gt;= Content.Load&amp;lt;Texture2D&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;flowermap&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;加载字体资源&lt;/span&gt;&lt;br/&gt;            largeFont = Content.Load&amp;lt;SpriteFont&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LargeMenuFont&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            mediumFont &lt;/span&gt;= Content.Load&amp;lt;SpriteFont&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MediumMenuFont&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            smallFont &lt;/span&gt;= Content.Load&amp;lt;SpriteFont&amp;gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SmallMenuFont&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;初始化列&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            InitializeColumns();&lt;br/&gt;            beePicker &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; BeePicker(Content, spriteBatch, System.DateTime.Now.Millisecond);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 初始化列&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; InitializeColumns()&lt;br/&gt;        {&lt;br/&gt;            columns &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Column&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; seed =&lt;span style="color: #000000;"&gt; System.DateTime.Now.Millisecond;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;初始化6列&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; &lt;span style="color: #800080;"&gt;5&lt;/span&gt;; i++&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                columns.Add(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Column(Content, spriteBatch, i * &lt;span style="color: #800080;"&gt;92&lt;/span&gt; + &lt;span style="color: #800080;"&gt;22&lt;/span&gt;, seed +&lt;span style="color: #000000;"&gt; i));&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; UnloadContent will be called once per game and is the place to unload&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; all content.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; UnloadContent()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; TODO: Unload any non ContentManager content here&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Allows the game to run logic such as updating the world,&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; checking for collisions, gathering input, and playing audio.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Update(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 退出游戏&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (GamePad.GetState(PlayerIndex.One).Buttons.Back ==&lt;span style="color: #000000;"&gt; ButtonState.Pressed)&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Exit();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 添加更新的逻辑&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;gameOver)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;处理用户的操作&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (TouchPanel.IsGestureAvailable)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;是否触摸到屏幕&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                {&lt;br/&gt;                    GestureSample gesture &lt;/span&gt;= TouchPanel.ReadGesture();&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取手势&lt;/span&gt;&lt;br/&gt;                    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (gesture.GestureType == GestureType.Tap)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;点击操作&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                    {&lt;br/&gt;                        HandleInput(gesture.Position);&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;传入点击的位置，处理点击操作&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                    }&lt;br/&gt;                }&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;更新花的状态，即不停地往下移动&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Column c &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; columns)&lt;br/&gt;                {&lt;br/&gt;                    c.Update();&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (c.ReachedBottom)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;花到达底部，游戏结束&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                    {&lt;br/&gt;                        gameOver &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Update(gameTime);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 点击输入操作处理&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="position"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; HandleInput(Vector2 position)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (position.X &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; position.X &amp;lt; &lt;span style="color: #800080;"&gt;480&lt;/span&gt; &amp;amp;&amp;amp; position.Y &amp;gt; &lt;span style="color: #800080;"&gt;700&lt;/span&gt; &amp;amp;&amp;amp; position.Y &amp;lt; &lt;span style="color: #800080;"&gt;800&lt;/span&gt;)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;点种了蜜蜂的位置&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                HandleBeeSelection(position.X);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (selectedBee != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;选中了蜜蜂&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                HandleFlowerSelection(position.X, position.Y);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 处理选中花的操作&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="x"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="y"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; HandleFlowerSelection(&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt; x, &lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt; y)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;判断是否点中了列的位置&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (x &amp;gt; &lt;span style="color: #800080;"&gt;10&lt;/span&gt; &amp;amp;&amp;amp; x &amp;lt; &lt;span style="color: #800080;"&gt;470&lt;/span&gt; &amp;amp;&amp;amp; y &amp;gt; &lt;span style="color: #800080;"&gt;100&lt;/span&gt; &amp;amp;&amp;amp; y &amp;lt; &lt;span style="color: #800080;"&gt;700&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; rainbowColor = &lt;span style="color: #800080;"&gt;6&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; selectedColumnIndex = (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)((x - &lt;span style="color: #800080;"&gt;10&lt;/span&gt;) / &lt;span style="color: #800080;"&gt;92&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取点中的列&lt;/span&gt;&lt;br/&gt;                Column selectedColumn =&lt;span style="color: #000000;"&gt; columns[selectedColumnIndex];&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取点中的列底部的花&lt;/span&gt;&lt;br/&gt;                Flower selectedFlower =&lt;span style="color: #000000;"&gt; selectedColumn.GetBottomFlower();&lt;br/&gt;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;判断是否点中了底部的花，并且花的颜色和蜜蜂的颜色要相等，或者花是彩色的花&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(selectedFlower != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; (selectedFlower.Color == selectedBee.Color || selectedFlower.Color ==&lt;span style="color: #000000;"&gt; rainbowColor))&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;移除花&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                    selectedColumn.RemoveBottomFlower();&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;替换另外一只蜜蜂，并且要保证至少要有一只蜜蜂可以和最底层的花可以匹配得上&lt;/span&gt;&lt;br/&gt;                    List&amp;lt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&amp;gt; availableFlowers =&lt;span style="color: #000000;"&gt; GetAvailableFlowers();&lt;br/&gt;                    beePicker.RemoveAndReplaceBee(selectedBee, availableFlowers);&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;取消对蜜蜂的选中状态&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                    beePicker.DeselectAll();&lt;br/&gt;                    selectedBee &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置选中的蜜蜂为null&lt;br/&gt;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;如果蜜蜂吃掉的是彩色的花则增加一分&lt;/span&gt;&lt;br/&gt;                    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (selectedFlower.Color ==&lt;span style="color: #000000;"&gt; rainbowColor)&lt;br/&gt;                    {&lt;br/&gt;                        score&lt;/span&gt;++&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;如果分数达到10, 20, 30... 则不断地增加花下落的Y轴偏移量速度&lt;/span&gt;&lt;br/&gt;                        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; ((score % &lt;span style="color: #800080;"&gt;10&lt;/span&gt;) == &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                        {&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Column c &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; columns)&lt;br/&gt;                                c.Velocity &lt;/span&gt;+= &lt;span style="color: #800080;"&gt;0.1f&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                        }&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取最底下花的颜色，用来作为随机生成蜜蜂的一个条件&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; List&amp;lt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt; GetAvailableFlowers()&lt;br/&gt;        {&lt;br/&gt;            List&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&amp;gt; flowerColors = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Column c &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; columns)&lt;br/&gt;            {&lt;br/&gt;                Flower f &lt;/span&gt;=&lt;span style="color: #000000;"&gt; c.GetBottomFlower();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (f != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                    flowerColors.Add(f.Color);&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; flowerColors;&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 处理选中蜜蜂操作&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="x"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; HandleBeeSelection(&lt;span style="color: #0000ff;"&gt;float&lt;/span&gt;&lt;span style="color: #000000;"&gt; x)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;first de-select any previously selected bee&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (selectedBee != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                selectedBee.IsSelected &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                selectedBee &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Mark and select the new bee&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            beePicker.MarkSelectedBee(x);&lt;br/&gt;            selectedBee &lt;/span&gt;=&lt;span style="color: #000000;"&gt; beePicker.GetSelectedBee(x);&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; This is called when the game should draw itself.&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="gameTime"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Draw(GameTime gameTime)&lt;br/&gt;        {&lt;br/&gt;            GraphicsDevice.Clear(Color.CornflowerBlue);&lt;br/&gt;&lt;br/&gt;            spriteBatch.Begin();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;画游戏背景&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            spriteBatch.Draw(backgroundTexture, Vector2.Zero, Color.White);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;判断游戏是否结束&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;gameOver)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;绘制花精灵&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Column c &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; columns)&lt;br/&gt;                    c.Draw();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;绘制蜜蜂精灵&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;                beePicker.Draw();&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                spriteBatch.DrawString(largeFont, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GAME OVER&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;150&lt;/span&gt;, &lt;span style="color: #800080;"&gt;400&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.Red);&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            spriteBatch.Draw(foregroundTexture, Vector2.Zero, Color.White);&lt;br/&gt;            DrawHUD();&lt;br/&gt;            spriteBatch.End();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Draw(gameTime);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 初始化屏幕&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; DrawHUD()&lt;br/&gt;        {&lt;br/&gt;            spriteBatch.Draw(hudTexture, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;7&lt;/span&gt;, &lt;span style="color: #800080;"&gt;7&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.White);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Print out game score and level&lt;/span&gt;&lt;br/&gt;            spriteBatch.DrawString(mediumFont, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Marathon&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;40&lt;/span&gt;, &lt;span style="color: #800080;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.Blue);&lt;br/&gt;            spriteBatch.DrawString(largeFont, score.ToString(), &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;127&lt;/span&gt;, &lt;span style="color: #800080;"&gt;45&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.Yellow);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;TODO: Draw a flower on the HUD&lt;/span&gt;&lt;br/&gt;            spriteBatch.Draw(flowerMapTexture, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;40&lt;/span&gt;, &lt;span style="color: #800080;"&gt;45&lt;/span&gt;), &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle(&lt;span style="color: #800080;"&gt;6&lt;/span&gt;*&lt;span style="color: #800080;"&gt;72&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;72&lt;/span&gt;, &lt;span style="color: #800080;"&gt;72&lt;/span&gt;), Color.White, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, Vector2.Zero, &lt;span style="color: #800080;"&gt;0.5f&lt;/span&gt;&lt;span style="color: #000000;"&gt;, SpriteEffects.None, 0f);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Print out instructions&lt;/span&gt;&lt;br/&gt;            spriteBatch.DrawString(smallFont, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Match flowers and bees&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;210&lt;/span&gt;, &lt;span style="color: #800080;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.Yellow);&lt;br/&gt;            spriteBatch.DrawString(smallFont, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Rainbow flowers match&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;206&lt;/span&gt;, &lt;span style="color: #800080;"&gt;30&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.Yellow);&lt;br/&gt;            spriteBatch.DrawString(smallFont, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;with all bees&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;260&lt;/span&gt;, &lt;span style="color: #800080;"&gt;50&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.Yellow);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Print out goal message&lt;/span&gt;&lt;br/&gt;            spriteBatch.DrawString(largeFont, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Collect Rainbow Flowers&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Vector2(&lt;span style="color: #800080;"&gt;50&lt;/span&gt;, &lt;span style="color: #800080;"&gt;115&lt;/span&gt;&lt;span style="color: #000000;"&gt;), Color.Blue);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;游戏的项目结构&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012041023181095.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;参考文章：&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/tess/archive/2012/03/02/xna-for-windows-phone-walkthrough-creating-the-bizzy-bees-game.aspx"&gt;http://blogs.msdn.com/b/tess/archive/2012/03/02/xna-for-windows-phone-walkthrough-creating-the-bizzy-bees-game.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/linzheng/aggbug/2441521.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/linzheng/archive/2012/04/10/2441521.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/linzheng/archive/2012/03/29/2422046.html</id><title type="text">Windows Phone 7 框架和页面</title><summary type="text">一、Windows Phone 7 框架(PhoneApplicationFrame)和页面(PhoneApplicationPage)在一个wp7应用程序运行的时候，程序的整个UI架构会由会有一个PhoneApplicationFrame和一个或者多个PhoneApplicationPage组成。PhoneApplicationFrame是一个顶级容器，里面容纳了PhoneApplicationPage，一个程序里面只有一个PhoneApplicationFrame，我们在App.xaml.cs里面看到的RootFrame就是当前程序的框架了。下面的方法会对RootFrame完成初始化操作 </summary><published>2012-03-28T16:20:00Z</published><updated>2012-03-28T16:20:00Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/linzheng/archive/2012/03/29/2422046.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/archive/2012/03/29/2422046.html"/><content type="html">&lt;p&gt;一、Windows Phone 7 框架(&lt;span&gt;PhoneApplicationFrame&lt;/span&gt;)和页面(&lt;span&gt;PhoneApplicationPage)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;在一个wp7应用程序运行的时候，程序的整个UI架构会由会有一个&lt;span&gt;PhoneApplicationFrame和一个或者多个&lt;span&gt;PhoneApplicationPage组成。&lt;span&gt;PhoneApplicationFrame是一个顶级容器，里面容纳了&lt;span&gt;PhoneApplicationPage，一个程序里面只有一个&lt;span&gt;PhoneApplicationFrame，我们在App.xaml.cs里面看到的RootFrame就是当前程序的框架了。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;下面的方法会对RootFrame完成初始化操作&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; InitializePhoneApplication()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (phoneApplicationInitialized)&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;            RootFrame = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PhoneApplicationFrame();&lt;br /&gt;            RootFrame.Navigated += CompleteInitializePhoneApplication;&lt;br /&gt;            RootFrame.NavigationFailed += RootFrame_NavigationFailed;&lt;br /&gt;            phoneApplicationInitialized = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CompleteInitializePhoneApplication(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, NavigationEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (RootVisual != RootFrame)&lt;br /&gt;                RootVisual = RootFrame;&lt;br /&gt;            RootFrame.Navigated -= CompleteInitializePhoneApplication;&lt;br /&gt;        }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;关于(&lt;span&gt;PhoneApplicationFrame&lt;/span&gt;)和(&lt;span&gt;PhoneApplicationPage)的关系可以用下面的一张图来表示&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012032820452366.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;二、页面(&lt;span&gt;PhoneApplicationPage)的导航&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;wp7页面的互相跳转的逻辑是用一个堆栈结构的容器来管理这些页面。如下图&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="sectionblock"&gt;&lt;img id="AP_Con_BackStack_Stack" title="BackStack 堆栈表示" src="http://i.msdn.microsoft.com/dynimg/IC531004.png" alt="BackStack 堆栈表示" /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;当应用程序中的页面调用 &lt;span&gt;&lt;span class="input"&gt;Navigate&lt;/span&gt;&lt;/span&gt; 时，当前页面会被放到后退堆栈上，并且系统将创建并显示目标页的新实例。当你在应用程序的页面之间进行导航时，系统会将多个条目添加到此堆栈。当页面调用 &lt;span&gt;&lt;span class="input"&gt;GoBack&lt;/span&gt;&lt;/span&gt; 时，或者当用户按手机的&lt;span class="label"&gt;&amp;ldquo;返回&amp;rdquo;&lt;/span&gt;按键时，将放弃当前页面，并将堆栈顶部的页面从后退堆栈中弹出并进行显示。此后退导航会继续弹出并显示，直到堆栈中不再有条目。此时，点按手机的&lt;span class="label"&gt;&amp;ldquo;返回&amp;rdquo;&lt;/span&gt;按键将终止应用程序。&lt;/p&gt;&lt;p&gt;这个堆栈容器我们是可以通过&lt;span&gt;PhoneApplicationPage出操控的&lt;/span&gt;，操控的相关方法和属性如下：&lt;/p&gt;&lt;p&gt;属性&lt;br /&gt;BackStack&amp;nbsp; 获取一个 IEnumerable，它用于枚举后退导航历史记录中的条目。&amp;nbsp; &lt;br /&gt;CanGoBack&amp;nbsp; 获取一个值，该值指示在后退导航历史记录中是否至少存在一个条目。&amp;nbsp;&lt;/p&gt;&lt;p&gt;CanGoForward&amp;nbsp; 获取一个值，该值指示在前进导航历史记录中是否至少存在一个条目。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;方法&lt;/p&gt;&lt;p&gt;GoBack&amp;nbsp; 导航到后退导航历史记录中的最新条目；如果后退导航时没有条目，则引发异常。&lt;/p&gt;&lt;p&gt;GoForward&amp;nbsp; 导航到前进导航历史记录中的最新条目，如果前进导航时没有条目，则引发异常。对于Windows Phone，该方法始终引发异常，因为没有前进导航堆栈。 （从 Frame 继承。）&lt;br /&gt;RemoveBackEntry&amp;nbsp; 此方法用于从后退堆栈中移除最近的条目，如果没有要移除的条目，则引发InvalidOperationException。如果您想移除多个项目，则多次调用此方法。此 API 是同步的，因此必须从UI 线程调用。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;事件&lt;br /&gt;&amp;nbsp; Navigated&amp;nbsp; 当已找到导航的内容并且内容可用时发生。 （从 Frame 继承。） &lt;br /&gt;&amp;nbsp; Navigating&amp;nbsp; 当请求新的导航时发生。 （从 Frame 继承。） &lt;br /&gt;&amp;nbsp; NavigationFailed&amp;nbsp; 在导航到请求的内容过程中遇到错误时发生。 （从 Frame 继承。） &lt;br /&gt;&amp;nbsp; NavigationStopped&amp;nbsp; 在通过调用 StopLoading()()()() 方法终止导航时发生，或者在当前导航进行过程中请求新的导航时发生。 （从 Frame 继承。） &lt;br /&gt;&amp;nbsp; Obscured&amp;nbsp; 当 shell chrome 包含帧时发生。&amp;nbsp; &lt;br /&gt;&amp;nbsp; OrientationChanged&amp;nbsp; 当 Orientation 属性发生更改时发生。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;三。下面用跟一个Demo来显示一下获取程序的&amp;nbsp;框架(&lt;span&gt;PhoneApplicationFrame&lt;/span&gt;)和页面(&lt;span&gt;PhoneApplicationPage)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;扩展方法类&lt;/p&gt;&lt;p&gt;Extensions.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Windows.Media;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; PageDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Extensions&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取该元素的可见树里面所有的子元素&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="element"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;可见元素&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;DependencyObject&amp;gt; GetVisualDescendants(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; DependencyObject element)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; GetVisualDescendantsAndSelfIterator(element).Skip(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取该元素的可见树里面所有的子元素以及该元素本身&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="element"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;可见元素&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;DependencyObject&amp;gt; GetVisualDescendantsAndSelfIterator(DependencyObject element)&lt;br /&gt;        {&lt;br /&gt;            Queue&amp;lt;DependencyObject&amp;gt; remaining = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Queue&amp;lt;DependencyObject&amp;gt;();&lt;br /&gt;            remaining.Enqueue(element);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (remaining.Count &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                DependencyObject obj = remaining.Dequeue();&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;yield&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; obj;&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (DependencyObject child &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; obj.GetVisualChildren())&lt;br /&gt;                {&lt;br /&gt;                    remaining.Enqueue(child);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取该元素的可见树里面下一级的子元素&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="element"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;可见元素&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;DependencyObject&amp;gt; GetVisualChildren(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; DependencyObject element)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; GetVisualChildrenAndSelfIterator(element).Skip(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取该元素的可见树里面下一级的子元素以及该元素本身&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="element"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;可见元素&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;DependencyObject&amp;gt; GetVisualChildrenAndSelfIterator(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; DependencyObject element)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;yield&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; element;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; count = VisualTreeHelper.GetChildrenCount(element);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; count; i++)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;yield&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; VisualTreeHelper.GetChild(element, i);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;br /&gt;测试获取程序页面类&lt;/p&gt;&lt;p&gt;Test.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; Microsoft.Phone.Controls;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; PageDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Test&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取当前的程序展示的页面&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; PhoneApplicationPage Page&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (Application.Current.RootVisual &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; PhoneApplicationFrame).GetVisualDescendants().OfType&amp;lt;PhoneApplicationPage&amp;gt;().FirstOrDefault(); }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取所有的框架下的页面&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; List&amp;lt;PhoneApplicationPage&amp;gt; Pages&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (Application.Current.RootVisual &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; PhoneApplicationFrame).GetVisualDescendants().OfType&amp;lt;PhoneApplicationPage&amp;gt;().ToList&amp;lt;PhoneApplicationPage&amp;gt;(); }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取程序所有的UI元素&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; List&amp;lt;DependencyObject&amp;gt; Elements&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (Application.Current.RootVisual &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; PhoneApplicationFrame).GetVisualDescendants().ToList&amp;lt;DependencyObject&amp;gt;(); }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;  &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="ContentPanel"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="12,0,12,0"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Content&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Button"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="72"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Left"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="139,176,0,0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="button1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Top"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="160"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Click&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="button1_Click"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Test.Page != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                MessageBox.Show(Test.Page.ToString());&lt;br /&gt;            }&lt;br /&gt;        }&lt;/div&gt;&lt;p&gt;单击的效果&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012032900182690.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000; font-size: 14pt;"&gt;欢迎购买我的书籍&lt;a href="http://product.dangdang.com/product.aspx?product_id=22624989" target="_blank"&gt;&lt;span style="color: #ff0000;"&gt;《深入浅出Windows Phone 7应用开发》&lt;/span&gt;&lt;/a&gt;  感谢大家的支持！！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://product.dangdang.com/product.aspx?product_id=22624989"&gt;http://product.dangdang.com/product.aspx?product_id=22624989&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/linzheng/aggbug/2422046.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/linzheng/archive/2012/03/29/2422046.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/linzheng/archive/2012/03/26/2418811.html</id><title type="text">Windows Phone 7 自定义事件</title><summary type="text">在Windows Phone的应用开发里面，对于事件这种东西我们可以随处可见，系统本来就已经封装好了各种各样的事件机制，如按钮的单击事件等等的。在实际的开发中，我们需要自己去给相关的类自定义一些事件来满足业务的要求，特别在使用观察着模式的时候，在wp7中利用事件去实现是理所当然的。 自定义事件步骤有下面的几个步骤：1、继承EventArgs类实现自己自定义的事件参数；2、定义一个委托；3、定义一个事件4、添加事件。下面来看一下一个Demo对自定义事件的实现，这个Demo只是对网络请求的状态进行一个简单的事件监控的调用处理：自定义的事件参数类StateChangedEventArgs.csus.</summary><published>2012-03-26T15:41:00Z</published><updated>2012-03-26T15:41:00Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/linzheng/archive/2012/03/26/2418811.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/archive/2012/03/26/2418811.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在Windows Phone的应用开发里面，对于事件这种东西我们可以随处可见，系统本来就已经封装好了各种各样的事件机制，如按钮的单击事件等等的。在实际的开发中，我们需要自己去给相关的类自定义一些事件来满足业务的要求，特别在使用观察着模式的时候，在wp7中利用事件去实现是理所当然的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 自定义事件步骤有下面的几个步骤：&lt;/p&gt;&lt;p&gt;1、继承EventArgs类实现自己自定义的事件参数；&lt;/p&gt;&lt;p&gt;2、定义一个委托；&lt;/p&gt;&lt;p&gt;3、定义一个事件&lt;/p&gt;&lt;p&gt;4、添加事件。&lt;/p&gt;&lt;p&gt;下面来看一下一个Demo对自定义事件的实现，这个Demo只是对网络请求的状态进行一个简单的事件监控的调用处理：&lt;/p&gt;&lt;p&gt;自定义的事件参数类&lt;/p&gt;&lt;p&gt;StateChangedEventArgs.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; EventDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 状态事件&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; StateChangedEventArgs : EventArgs&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; NewState;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;readonly&lt;/span&gt; DateTime Timestamp;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; StateChangedEventArgs(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; newstate)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.NewState = newstate;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.Timestamp = DateTime.Now;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;在业务类里面定义事件：&lt;/p&gt;&lt;p&gt;NetTask.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Net;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Threading;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; EventDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; NetTask&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;定义委托&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; StateChanged(NetTask sender, StateChangedEventArgs args);&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;定义事件&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;event&lt;/span&gt; StateChanged OnStateChanged;&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;出事状态&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; NetTaskName = &lt;span style="color: #800000;"&gt;""&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 网络任务&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="url"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; StartNetTask(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; url)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; success = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; attempt = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (attempt &amp;lt; &lt;span style="color: #800080;"&gt;3&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                AsyncCallback callback = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;开启线程等待&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                ManualResetEvent webRequestWait = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ManualResetEvent(&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;br /&gt;                Uri targetUri = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Uri(url);&lt;br /&gt;                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetUri);&lt;br /&gt;                request.Method = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;POST&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (callback == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    callback = &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt;(IAsyncResult asRequest)&lt;br /&gt;                    {&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;                        {&lt;br /&gt;                            success = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;                            webRequestWait.Set();&lt;br /&gt;                            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;hellip;&amp;hellip;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                        }&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt;&lt;br /&gt;                        {&lt;br /&gt;                            OnStateChanged(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StateChangedEventArgs(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;重试&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;));&lt;br /&gt;                            webRequestWait.Set();&lt;br /&gt;                        }&lt;br /&gt;                    };&lt;br /&gt;                }&lt;br /&gt;                request.BeginGetRequestStream(callback, request);&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;等待线程结束&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                webRequestWait.WaitOne();&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (success)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;                }&lt;br /&gt;                attempt++;&lt;br /&gt;                Thread.Sleep(&lt;span style="color: #800080;"&gt;1000&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (success)&lt;br /&gt;            {&lt;br /&gt;                OnStateChanged(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StateChangedEventArgs(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;成功&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;));&lt;br /&gt;                Thread.Sleep(&lt;span style="color: #800080;"&gt;50&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                OnStateChanged(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StateChangedEventArgs(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;失败&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;));&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;br /&gt;简单的测试一下&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="ContentPanel"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="12,0,12,0"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Content&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="测试网络"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="72"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Left"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="143,105,0,0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="button1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Top"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="202"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Click&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="button1_Click"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="50"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Left"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="96,270,0,0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="textBlock1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="网络的状态："&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Top"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="126"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="48"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Left"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="34,326,0,0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="textBlock2"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=""&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Top"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="377"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;MainPage.xaml.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; Microsoft.Phone.Controls;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; EventDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; MainPage : PhoneApplicationPage&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; MainPage()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            NetTask netTask = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; NetTask();&lt;br /&gt;            netTask.OnStateChanged += OnStateChanged;&lt;br /&gt;            netTask.NetTaskName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;测试网络&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            netTask.StartNetTask(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://www.cnblogs.com&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnStateChanged(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, StateChangedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            NetTask temp = sender &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; NetTask;&lt;br /&gt;            textBlock2.Text = temp.NetTaskName + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + e.NewState+&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;+e.Timestamp.ToLongTimeString();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&amp;nbsp;运行的效果如下：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012032623445510.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000; font-size: 14pt;"&gt;欢迎购买我的书籍&lt;a href="http://product.dangdang.com/product.aspx?product_id=22624989" target="_blank"&gt;&lt;span style="color: #ff0000;"&gt;《深入浅出Windows Phone 7应用开发》&lt;/span&gt;&lt;/a&gt;  感谢大家的支持！！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://product.dangdang.com/product.aspx?product_id=22624989"&gt;http://product.dangdang.com/product.aspx?product_id=22624989&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012032023421877.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/linzheng/aggbug/2418811.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/linzheng/archive/2012/03/26/2418811.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/linzheng/archive/2012/03/24/2415958.html</id><title type="text">Windows Phone 7 LongListSelector控件实现分类列表和字母索引</title><summary type="text">在wp7手机里面的联系人列表和程序里面里面我们可以看到一个根据字母索引来定位联系人或者应用程序的控件，那么这个控件就是LongListSelector控件了。LongListSelector是一种比ListBox更加强大的列表控件，你可以根据你列表的信息来分类排列，根据类别快速定位到你选中的类别的列表下，在数据量很大的情况下这种分类的优势很明显。LongListSelector可以自定义列表头，列表尾、类表头、列别尾等的样式和数据，可以实现各种个性化的列表样式和不同的数据的展现方式。Windows Phone 7手机的联系人列表就是基于LongListSelector控件设计的。LongLi.</summary><published>2012-03-24T12:51:00Z</published><updated>2012-03-24T12:51:00Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/linzheng/archive/2012/03/24/2415958.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/archive/2012/03/24/2415958.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在wp7手机里面的联系人列表和程序里面里面我们可以看到一个根据字母索引来定位联系人或者应用程序的控件，那么这个控件就是LongListSelector控件了。&lt;/p&gt;&lt;p&gt;LongListSelector是一种比ListBox更加强大的列表控件，你可以根据你列表的信息来分类排列，根据类别快速定位到你选中的类别的列表下，在数据量很大的情况下这种分类的优势很明显。LongListSelector可以自定义列表头，列表尾、类表头、列别尾等的样式和数据，可以实现各种个性化的列表样式和不同的数据的展现方式。Windows Phone 7手机的联系人列表就是基于LongListSelector控件设计的。LongListSelector控件的常用属性和常用事件分别如表12.6和表12.7所示。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 表12.6 LongListSelector控件常用属性&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;名称&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;说明&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;DisplayAllGroups&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;bool类型的属性，当值为true时，它显示所有的分组无论该组中是否有选项或者数据，默认值为false。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;GroupFooterTemplate&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;DataTemplate类型的属性，它是负责绑定每个组的底部的数据和样式的模板。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;GroupHeaderTemplate&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;DataTemplate类型的属性，它是负责绑定每个组的顶部的数据和样式的模板。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;GroupItemsPanel&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;ItemsPanelTemplate类型的属性，设置组的内部的Panel面板的内容。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;GroupItemTemplate&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;DataTemplate类型的属性，它是负责绑定每个组里面的元素的数据和样式的模板。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;ItemTemplate&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;DataTemplate类型的属性，它是负责绑定所有选项或者元素的数据和样式的模板。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;ListFooterTemplate&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;DataTemplate类型的属性，它是负责绑定整个List底部的数据和样式的模板。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;ListHeaderTemplate&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;DataTemplate类型的属性，它是负责绑定整个List顶部的数据和样式的模板。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;SelectedItem&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;获取或者设置选中的选项&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;ShowListFooter&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;bool类型的属性，是否显示列脚，默认值为true。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="144"&gt;&lt;p&gt;ShowListHeader&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="431"&gt;&lt;p&gt;bool类型的属性，是否显示列头，默认值为true。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;表12.7 LongListSelector控件常用事件&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="130"&gt;&lt;p&gt;名称&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="444"&gt;&lt;p&gt;说明&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="130"&gt;&lt;p&gt;Link&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="444"&gt;&lt;p&gt;当查找的内容被找到时，触发的事件。&lt;/p&gt;&lt;p&gt;用法示例：&lt;/p&gt;&lt;p&gt;selector.Link += new &amp;nbsp; EventHandler&amp;lt;LinkUnlinkEventArgs&amp;gt;(selector_Link);&lt;/p&gt;&lt;p&gt;void selector_Link(object sender, &amp;nbsp; LinkUnlinkEventArgs e) {...}&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="130"&gt;&lt;p&gt;Unlink&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="444"&gt;&lt;p&gt;查找的内容没有被找到时，触发的事件。&lt;/p&gt;&lt;p&gt;用法示例:&lt;/p&gt;&lt;p&gt;selector.Unlink += new&lt;/p&gt;&lt;p&gt;&amp;nbsp;EventHandler&amp;lt;LinkUnlinkEventArgs&amp;gt;(selector_Unlink); &amp;nbsp;&lt;/p&gt;&lt;p&gt;void selector_Unlink(object sender, &amp;nbsp; LinkUnlinkEventArgs e) {... }&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="130"&gt;&lt;p&gt;SelectionChanged&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="444"&gt;&lt;p&gt;选择的选项改变时触发的事件。&lt;/p&gt;&lt;p&gt;用法示例:&lt;/p&gt;&lt;p&gt;selector.SelectionChanged += new&lt;/p&gt;&lt;p&gt;SelectionChangedEventHandler(selector_SelectionChanged);&lt;/p&gt;&lt;p&gt;void selector_SelectionChanged(object sender, &amp;nbsp; SelectionChangedEventArgs e)&amp;nbsp; {... }&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="130"&gt;&lt;p&gt;ScrollingCompleted&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="444"&gt;&lt;p&gt;当列表滚动结束的时候触发的事件。&lt;/p&gt;&lt;p&gt;用法示例:&lt;/p&gt;&lt;p&gt;selector.ScrollingCompleted += new&lt;/p&gt;&lt;p&gt;&amp;nbsp;EventHandler(selector_ScrollingCompleted);&lt;/p&gt;&lt;p&gt;void selector_ScrollingCompleted(object &amp;nbsp; sender, EventArgs e) {...}&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="130"&gt;&lt;p&gt;ScrollingStarted&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="444"&gt;&lt;p&gt;当列表滚动开始的时候触发的事件。&lt;/p&gt;&lt;p&gt;用法示例:&lt;/p&gt;&lt;p&gt;selector.ScrollingStarted += new &amp;nbsp; EventHandler(selector_ScrollingStarted);&lt;/p&gt;&lt;p&gt;void selector_ScrollingStarted(object &amp;nbsp; sender, EventArgs e){...}&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;下面给出列表选择框的示例：演示如何使用LongListSelector控件进行列表信息分类。&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"&gt;代码清单&lt;/span&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 10.5pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;" lang="EN-US"&gt;12-6&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"&gt;：列表选择框（源代码：第&lt;/span&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 10.5pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;" lang="EN-US"&gt;12&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"&gt;章&lt;/span&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 10.5pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;" lang="EN-US"&gt;\Examples_12_6&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 10.5pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;" lang="EN-US"&gt;MainPage.xaml&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"&gt;文件主要代码&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;phone:PhoneApplicationPage.Resources&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;&amp;mdash;定义组头绑定模板--&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="GroupHeader"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Background&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneAccentBrush}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneTouchTargetOverhang}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Padding&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneTouchTargetOverhang}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Key}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;&amp;mdash;定义组选项绑定模板--&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="GroupItem"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Background&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneAccentBrush}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneTouchTargetOverhang}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Padding&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneTouchTargetOverhang}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Key}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Style&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneTextLargeStyle}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;&amp;mdash;定义列头绑定模板--&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="ListHeader"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Header"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Style&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneTextTitle1Style}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span style="color: #0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;&amp;mdash;定义列表选项绑定模板--&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="ItemTmpl"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Title}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;phone:PhoneApplicationPage.Resources&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &amp;hellip;&amp;hellip;&lt;br /&gt;        &lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加LongListSelector控件&lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="ContentPanel"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="12,0,12,0"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="LongList"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Background&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Transparent"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;br /&gt;                    ItemTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource ItemTmpl}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;                    ListHeaderTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource ListHeader}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;br /&gt;                    GroupHeaderTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource GroupHeader}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;                    GroupItemTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource GroupItem}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;phone:PhoneApplicationPage&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;MainPage.xaml.cs文件代码&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; Microsoft.Phone.Controls;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; LongListSelectorDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; MainPage : PhoneApplicationPage&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; MainPage()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;使用List&amp;lt;T&amp;gt;来初始化数据&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            List&amp;lt;Item&amp;gt; mainItem = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; &lt;span style="color: #800080;"&gt;10&lt;/span&gt;; i++)&lt;br /&gt;            {&lt;br /&gt;                mainItem.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Item() { Content = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;A类别&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, Title = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;测试A &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + i.ToString() });&lt;br /&gt;                mainItem.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Item() { Content = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;B类别&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, Title = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;测试B&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + i.ToString() });&lt;br /&gt;                mainItem.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Item() { Content = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;C类别&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, Title = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;测试C&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + i.ToString() });&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;使用Linq来查询List&amp;lt;Item&amp;gt;数据 按照Content来进行分组&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; selected = &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; c &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; mainItem group c by c.Content into n &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GroupingLayer&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;, Item&amp;gt;(n);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.LongList.ItemsSource = selected;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;继承Linq的IGrouping接口  来存储分组的数据&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; GroupingLayer&amp;lt;TKey, TElement&amp;gt; : IGrouping&amp;lt;TKey, TElement&amp;gt;&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;分组数据&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;readonly&lt;/span&gt; IGrouping&amp;lt;TKey, TElement&amp;gt; grouping;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;初始化&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; GroupingLayer(IGrouping&amp;lt;TKey, TElement&amp;gt; unit)&lt;br /&gt;            {&lt;br /&gt;                grouping = unit;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;唯一的键值&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; TKey Key&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; grouping.Key; }&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;重载判断相等方法&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; Equals(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; obj)&lt;br /&gt;            {&lt;br /&gt;                GroupingLayer&amp;lt;TKey, TElement&amp;gt; that = obj &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; GroupingLayer&amp;lt;TKey, TElement&amp;gt;;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (that != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.Key.Equals(that.Key));&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; IEnumerator&amp;lt;TElement&amp;gt; GetEnumerator()&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; grouping.GetEnumerator();&lt;br /&gt;            }&lt;br /&gt;            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; grouping.GetEnumerator();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;List选项的类  Content表示类别 Title表示选项的标题&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Item&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Title { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Content { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012032420374021.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"&gt;下面再来看看第二例子，实现LongListSelector控件的字母索引。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"&gt;Item.cs&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; LongListSelectorDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 选项实体类&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Item&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Name { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Content { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取名字的首个字符用来作为分组的依据&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; GetFirstNameKey(Item item)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;char&lt;/span&gt; key;&lt;br /&gt;            key = &lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;.ToLower(item.Name[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;]);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (key &amp;lt; &lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;a&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt; || key &amp;gt; &lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;z&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                key = &lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;#&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; key.ToString();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"&gt;ItemInGroup.cs&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; LongListSelectorDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 组集合&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; ItemInGroup: List&amp;lt;Item&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; ItemInGroup(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; category)&lt;br /&gt;        {&lt;br /&gt;            Key = category;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;组的键&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Key { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;组是否有选项&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; HasItems { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; Count &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; } }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"&gt;Items.cs&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; LongListSelectorDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 总数据集合&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Items: List&amp;lt;ItemInGroup&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;索引&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Groups = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;#|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;         &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Items()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取要绑定的数据源&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            List&amp;lt;Item&amp;gt; items = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();&lt;br /&gt;            items.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Item { Name = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;a测试&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, Content = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;a内容&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; });&lt;br /&gt;            items.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Item { Name = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;b测试&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, Content = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;b内容&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; });&lt;br /&gt;            items.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Item { Name = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;c测试&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, Content = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;c内容&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; });&lt;br /&gt;            items.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Item { Name = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;d测试&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, Content = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;d内容&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; });&lt;br /&gt;            items.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Item { Name = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;e测试&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, Content = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;e内容&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; });&lt;br /&gt;            items.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Item { Name = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;f测试&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, Content = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;f内容&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; });&lt;br /&gt;            items.Add(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Item { Name = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;g测试&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, Content = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;g内容&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; });&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;组的字典列表&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Dictionary&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;, ItemInGroup&amp;gt; groups = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;, ItemInGroup&amp;gt;();&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;初始化组列表，即用字母列表来分组&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; c &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; Groups.Split(&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;|&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;))&lt;br /&gt;            {&lt;br /&gt;                ItemInGroup group = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ItemInGroup(c.ToString());&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加组数据到集合&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.Add(group);&lt;br /&gt;                groups[c.ToString()] = group;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;             &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;初始化选项列表，即按照选项所属的组来放进它属于的组里面&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (Item item &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; items)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加选项数据到集合&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                groups[Item.GetFirstNameKey(item)].Add(item);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;MainPage.xaml&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="ContentPanel"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="12,0,12,0"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="longListSelector"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Background&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Transparent"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;                                          Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0,-8,0,0"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector.GroupItemsPanel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ItemsPanelTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:WrapPanel &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Orientation&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Horizontal"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ItemsPanelTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector.GroupItemsPanel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector.GroupItemTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Background&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Red"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;br /&gt;                                    Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="99"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="99"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="6"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; IsHitTestVisible&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding HasItems}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Key}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;br /&gt;                                           FontFamily&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneFontFamilySemiBold}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;                                           FontSize&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="48"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;                                           Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="8,0,0,0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;                                           Foreground&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="White"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;                                        &lt;br /&gt;                                           VerticalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Bottom"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector.GroupItemTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector.GroupHeaderTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Background&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Transparent"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="12,8,0,8"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Background&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneAccentBrush}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;     &lt;br /&gt;                                        Padding&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="8,0,0,0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="62"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="62"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;                  &lt;br /&gt;                                        HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Left"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Key}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;br /&gt;                                               Foreground&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="#FFFFFF"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;br /&gt;                                               FontSize&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="48"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;                                               FontFamily&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneFontFamilySemiLight}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;                                               HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Left"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;                                               VerticalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Bottom"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                            &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector.GroupHeaderTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector.ItemTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="12,8,0,8"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ColumnDefinition &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Auto"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ColumnDefinition &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="*"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                            &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                            &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;StackPanel &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Grid.Column&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Top"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Name}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Style&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneTextLargeStyle}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; FontFamily&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneFontFamilySemiBold}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="12,-12,12,6"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                                &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Content}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Style&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneTextNormalStyle}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; TextWrapping&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Wrap"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; FontFamily&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource PhoneFontFamilySemiBold}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                            &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector.ItemTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;toolkit:LongListSelector&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt; MainPage.xaml.cs&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; Microsoft.Phone.Controls;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; LongListSelectorDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; MainPage : PhoneApplicationPage&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Constructor&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; MainPage()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            longListSelector.ItemsSource = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Items();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;运行的效果如下：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012032420460047.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012032420462468.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000; font-size: 14pt;"&gt;欢迎购买我的书籍&lt;a href="http://product.dangdang.com/product.aspx?product_id=22624989" target="_blank"&gt;&lt;span style="color: #ff0000;"&gt;《深入浅出Windows Phone  7应用开发》&lt;/span&gt;&lt;/a&gt; 感谢大家的支持！！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://product.dangdang.com/product.aspx?product_id=22624989"&gt;http://product.dangdang.com/product.aspx?product_id=22624989&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012032023421877.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/linzheng/aggbug/2415958.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/linzheng/archive/2012/03/24/2415958.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/linzheng/archive/2012/03/23/2414160.html</id><title type="text">Windows Phone7 VS iPhone&amp;amp;Android 平台优劣势邀您参与PK [送书活动以及样章阅读]</title><summary type="text">活动地址：http://bbs.chinaunix.net/thread-3688019-1-1.html</summary><published>2012-03-23T11:10:00Z</published><updated>2012-03-23T11:10:00Z</updated><author><name>linzheng</name><uri>http://www.cnblogs.com/linzheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/linzheng/archive/2012/03/23/2414160.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/linzheng/archive/2012/03/23/2414160.html"/><content type="html">&lt;p&gt;活动地址：&lt;a href="http://bbs.chinaunix.net/thread-3688019-1-1.html"&gt;http://bbs.chinaunix.net/thread-3688019-1-1.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/152755/2012032319074279.jpg" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/linzheng/aggbug/2414160.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/linzheng/archive/2012/03/23/2414160.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
