Windows Phone中的路由事件-以ListBox控件为例
今天我们来介绍一下Windows Phone中的路由事件,以ListBox控件为例。
首先我们来熟悉一下路由事件的概念。
路由事件是具有更强传播能力的事件,他们可以在元素树中向上冒泡和向下隧道传播,并且沿着传播路径被事件处理程序处理。路由事件经常以冒泡路由事件和隧道路由事件的形式出现,冒泡路由事件是在元素树中向上传播的一种事件,触发事件的源会把事件传递给他的父元素,他的父元素又会将事件继续向上传递,直到传递到元素树的顶端,或者有着特殊的逻辑处理。稍后会给大家详细讲述冒泡路由事件的工作方式。隧道路由事件的工作方式和冒泡路由事件相同,但方向相反。他是在元素树中向下传播的一种事件,触发事件的源的会寻找他的子元素,然后把事件传递给他。隧道路由事件通常比较容易辨认,因为他们都以单词Preview开头。隧道路由事件总是在冒泡路由事件之前被触发。今天我们的重点是冒泡路由事件。
由于是讲Windows phone中的路由事件,那就要讲一下触摸屏设备所特有的事件--触摸事件。在Windows phone中 触摸事件主要有3种,比较简单,分别是ManipulationStarted事件,他是在用户的手指触摸到屏幕时触发的事件。ManipulationDelta事件,他是用户的手指在屏幕上滑动式触发的事件。ManipulationCompleted事件,他是用户的手指离开屏幕时触发的事件。值得注意的是,以上三种触摸事件都是冒泡路由事件。
好,下面让我们来结合程序详细介绍一下Windows phone中的路由事件。
新建一个Windows Phone应用程序,在内容Grid中添加以下XAML代码。
1 <ListBox x:Name="listBox"
2 ManipulationStarted="listBox_ManipulationStarted"
3 ManipulationCompleted="listBox_ManipulationCompleted"
4 >
5 <ListBoxItem x:Name="listBoxItem1"
6 ManipulationStarted="listBoxItem1_ManipulationStarted"
7 ManipulationCompleted="listBoxItem1_ManipulationCompleted">
8 <TextBlock x:Name="textBlock1" FontSize="30"
9 Text="文本一文本一文本一"
10 ManipulationStarted="textBlock1_ManipulationStarted"
11 ManipulationCompleted ="textBlock1_ManipulationCompleted"/>
12 </ListBoxItem>
13 <ListBoxItem x:Name="listBoxItem2"
14 ManipulationStarted="listBoxItem2_ManipulationStarted"
15 ManipulationCompleted="listBoxItem2_ManipulationCompleted">
16 <TextBlock x:Name="textBlock2" FontSize="30"
17 Text="文本二文本二文本二"
18 ManipulationStarted="textBlock2_ManipulationStarted"
19 ManipulationCompleted="textBlock2_ManipulationCompleted"/>
20 </ListBoxItem>
21 </ListBox>
这段代码比较简单,包括一个listbox控件,和两个listboxitem,每个listboxitem的内容也比较简单,就是一行文本,我们给每个控件都分别注册了ManipulationStarted事件和ManipulationCompleted事件。
这是完成后的手机界面:
接下来,我们添加后台的事件处理程序,上代码。
首先添加一个名字空间:
1 using System.Diagnostics;
然后是事件处理程序的代码:
1 private void listBox_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
2 {
3 Debug.WriteLine("OUT PUT: listBox_ManipulationStarted in {0}", DateTime.Now.ToLongTimeString());
4 }
5
6 private void listBox_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
7 {
8 Debug.WriteLine("OUT PUT: listBox_ManipulationCompleted in {0}", DateTime.Now.ToLongTimeString());
9 }
10
11 private void listBoxItem1_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
12 {
13 Debug.WriteLine("OUT PUT: listBoxItem1_ManipulationStarted in {0}", DateTime.Now.ToLongTimeString());
14 }
15
16 private void listBoxItem1_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
17 {
18 Deb
补充:移动开发 , Windows Phone ,