Windows Phone 内容滑动切换实现

在新闻类的APP中,有一个经常使用的场景:左右滑动屏幕来切换上一条或下一条新闻

那么通常我们该使用哪种方式去实现呢?可以参考一下Demo的实现步骤。

1,添加Windows Phone用户自定义控件。例如:

这里我为了演示的方便,添加了5个用户自定义控件,通常我们在做应用的时候,只需要添加一个用户自定义控件,结合数据绑定,来承载不同新闻内容。

演示的自定义控件XAML代码也比较简单:

 1 <UserControl x:Class="PageSliding.WindowsPhoneControl1"
 2     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 5     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 6     mc:Ignorable="d"
 7     FontFamily="{StaticResource PhoneFontFamilyNormal}"
 8     FontSize="{StaticResource PhoneFontSizeNormal}"
 9     Foreground="{StaticResource PhoneForegroundBrush}"
10     d:DesignHeight="480" d:DesignWidth="480">
11     
12     <Grid x:Name="LayoutRoot" Background="Red">
13         <TextBlock Text="用户空间1"/>
14     </Grid>
15 </UserControl>

这里我只将背景颜色进行了修改和添加了一个TextBlock控件,来区别我添加的5个用户自定义控件。

2,切换到内容页面的XAML页面。

 1 <phone:PhoneApplicationPage
 2     x:Class="PageSliding.Solution2"
 3     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 4     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 5     xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
 6     xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
 7     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 8     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 9     FontFamily="{StaticResource PhoneFontFamilyNormal}"
10     FontSize="{StaticResource PhoneFontSizeNormal}"
11     Foreground="{StaticResource PhoneForegroundBrush}"
12     SupportedOrientations="Portrait" Orientation="Portrait"
13     mc:Ignorable="d"
14     shell:SystemTray.IsVisible="True" Loaded="PhoneApplicationPage_Loaded_1">
15 
16     <!--LayoutRoot 是包含所有页面内容的根网格-->
17     <Grid x:Name="LayoutRoot" Background="Transparent">       
18         <!--ContentPanel - 在此处放置其他内容-->
19         <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0" ManipulationDelta="ContentPanel_ManipulationDelta_1" ManipulationCompleted="ContentPanel_ManipulationCompleted_1">
20             <Grid.RenderTransform>            
21                 <CompositeTransform  x:Name="transform"/>
22             </Grid.RenderTransform>
23         </Grid>
24     </Grid>
25 </phone:PhoneApplicationPage>

添加ManipulationDelta和ManipulationCompleted事件,以及添加Grid的CompositeTransform对象。

3,切换到相应.cs页面。例如:

 1     public partial class Solution2 : PhoneApplicationPage
 2     {
 3         List<UserControl> UserControlList;
 4         //当前集合的显示项的索引
 5         int index = 0;
 6         public Solution2()
 7         {
 8             InitializeComponent();
 9 
10             //Demo:直接实例化UserControl的集合。
11             UserControlList = new List<UserControl>(){
12             new WindowsPhoneControl1(),
13             new WindowsPhoneControl2(),
14             new WindowsPhoneControl3(),
15             new WindowsPhoneControl4(),
16             new WindowsPhoneControl5()
17             };
18         }
19         private void PhoneApplicationPage_Loaded_1(object sender, RoutedEventArgs e)
20         {
21             //Demo:首次加载集合的第一项
22             this.ContentPanel.Children.Add(UserControlList[0]);         
23         }
24 
25         private void ContentPanel_ManipulationDelta_1(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
26         {
27             //页面ContentPanel容器只能左右拖动不能上下拖动。
28             transform.TranslateX += e.DeltaManipulation.Translation.X;
29             transform.TranslateY = 0;
30         }
31 
32         private void ContentPanel_ManipulationCompleted_1(object sender, System.Windows.Input.ManipulationCompletedEventArgs e)
33         {
34             //ContentPanel容器总转换的线性运动的X坐标值〉=100
35             if (e.TotalManipulation.Translation.X >= 100)
36             {
37                 //加载前一项
38                 if (this.index == 0)
39                 {
40                     MessageBox.Show("当前为第一项");
41                 }
42                 else
43                 {
44                     index -= 1;
45                     //加载前一条数据
46                     this.ContentPanel.Children.Clear();
47                     this.ContentPanel.Children.Add(UserControlList[index]);
48                 }
49             }
50             //ContentPanel容器总转换的线性运动的X坐标值〈=-100
51             else if (e.TotalManipulation.Translation.X <= -100)
52             {
53                 //加载后一项
54                 if(this.index==4)
55                 {
56                     MessageBox.Show("当前为最后一项");
57                 }
58                 else
59                 {
60                     index += 1;
61                     //加载后一条数据
62                     this.ContentPanel.Children.Clear();
63                     this.ContentPanel.Children.Add(UserControlList[index]);
64                 }
65             }
66             //切换之后恢复ContentPanel容器的X偏移量.
67             transform.TranslateX = 0;
68         }
69     }

通过以上的操作,我们就可以左右滑动切换刚才定义的5个不同用户自定义控件了。

另外我们也可以参考该文章:windows phone开发学习--自己实现一个Gallery control  该文章的实现方式主要是一次加载3个不同的用户控件,通过左右滑动来加载3个不同的用户自定义控件。

转载于:https://www.cnblogs.com/wzk89/archive/2013/05/24/3097325.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言interrupt函数,中断处理函数数组interrupt[]初始化

在系统初始化期间&#xff0c;trap_init()函数将对中断描述符表IDT进行第二次初始化(第一次只是建一张IDT表&#xff0c;让其指向ignore_intr函数)&#xff0c;而在这次初始化期间&#xff0c;系统的0~19号中断(用于分NMI和异常的中断向量)均被设置好。与此同时&#xff0c;用于…

bytevalue_Java Number byteValue()方法与示例

bytevalueNumber类byteValue()方法 (Number Class byteValue() method) byteValue() method is available in java.lang package. byteValue()方法在java.lang包中可用。 byteValue() method is used to return the value denoted by this Number object converted to type byt…

第二章 染色热力学理论单元测验

1,()测定是染色热力学性能研究的基础 吸附等温线。 2,吸附是放热反应,温度升高,亲和力() 减小 3,染色系统中包括() 染料。 染深色介质。 染色助剂。 纤维。 4,下列对状态函数特点叙述正确的为() 状态函数只有在平衡状态的系统中才有确定值。 在非平衡状态的系统…

使用鸢尾花数据集实现一元逻辑回归、多分类问题

目录鸢尾花数据集逻辑回归原理【1】从线性回归到广义线性回归【2】逻辑回归【3】损失函数【4】总结TensorFlow实现一元逻辑回归多分类问题原理独热编码多分类的模型参数损失函数CCETensorFlow实现多分类问题独热编码计算准确率计算交叉熵损失函数使用花瓣长度、花瓣宽度将三种鸢…

开源HTML5应用开发框架 - iio Engine

随着HTML5的发展&#xff0c;越来越多的基于HTML5技术的网页开发框架出现&#xff0c;在今天的这篇文章中&#xff0c;我们将介绍iio Engine&#xff0c;它是一款开源的创建HTML5应用的web框架。整个框架非常的轻量级&#xff0c;只有45kb大小&#xff0c;并且整合了debug系统&…

c语言double root,C语言修仙

root(1)(2/2)AD1AD4林浔合理推测&#xff0c;青城山剑宗&#xff0c;也就是祁云所在的剑修一脉&#xff0c;掌握着一些道修并不知道的传承。譬如——怎样找到赤霄龙雀剑&#xff0c;又或者&#xff0c;怎样使用它。这样一来&#xff0c;青城的守卫阵法没有反应也能解释了&#…

【转】Black Box

Introduction BlackBox是FPGA设计中一个重要的技巧&#xff0c;不过觉得Xilinx的文档没有很好地将它讲清楚。 BlackBox的主要想法就是把设计的某一个子模块单独综合&#xff0c;综合的结果作为一个黑盒子子模块&#xff0c;上层设计不再对这个模块进行优化&#xff0c;只能看到…

Java Compiler disable()方法与示例

编译器类disable()方法 (Compiler Class disable() method) disable() method is available in java.lang package. disable()方法在java.lang包中可用。 disable() method is used to cause the compiler to stop operation. disable()方法用于使编译器停止操作。 disable() m…

【神经网络计算】——神经网络实现鸢尾花分类

本blog为观看MOOC视频与网易云课堂所做的笔记 课堂链接&#xff1a; 人工智能实践:TensorFlow笔记 吴恩达机器学习 疑问与思考 为什么按照batch喂入数据 之前看的视频里面处理数据都是一次性将所有数据喂入&#xff0c;现在看的这个视频对数据进行了分组投入。这是为何&#…

第三章 染色动力学理论单元测试

1,准二级动力学模型认为,染色速率与()的二次方成正比 纤维上未被占满的位置(空位)数量 2,研究染色动力学的意义有() 了解染料走向平衡的速率。 初染速率。 匀染性。 3,求出染料的扩散系数的意义有() 了解各因素对扩散系数的影响。 求出不同温度下的扩散系数,计算…

CDOJ--1668

原题链接&#xff1a;http://acm.uestc.edu.cn/problem.php?pid1668 由于题目意思指的是将分数拆分成不同的单位分数之和&#xff0c;所以就不用考虑将2/3拆成1/31/3这种情况了&#xff1b;又由于好的拆分要求项数即len要少&#xff0c;最小的项要大&#xff0c;故可以采用迭代…

c# xaml语言教程,c#学习之30分钟学会XAML

1.狂妄的WPF相对传统的Windows图形编程&#xff0c;需要做很多复杂的工作&#xff0c;引用许多不同的API。例如&#xff1a;WinForm(带控件表单)、GDI(2D图形)、DirectXAPI(3D图形)以及流媒体和流文档等&#xff0c;都需要不同的API来构建应用程序。WPF就是看着上面的操作复杂和…

(Android实战)AsyncTask和Handler两种异步方式实现原理和优缺点比较

1 AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l 简单,快捷 l 过程可控 使用的缺点…

Java Collections list()方法与示例

集合类list()方法 (Collections Class list() method) list() method is available in java.util package. list()方法在java.util包中可用。 list() method is used to return an array list that contains all the elements returned by the given Enumeration and the way o…

第八章 异常

第八章 异常 异常事件可能是错误&#xff08;如试图除以零&#xff09;&#xff0c;也可能是通常不会发生的事情。 Python提供功能强大的替代解决方案——异常处理机制。 异常是什么&#xff1f; Python使用异常对象来表示异常状态&#xff0c;并在遇到错误时引发异常。异常…

hdu 1564 Play a game

对于本题&#xff0c;若要当前的 player 赢&#xff0c;剩下所走的步数必须是奇数步。所以对于每步的 player 所放弃的选择的步数为偶数步。因此&#xff0c;对于整个 game 来说&#xff0c;所放弃的步数 m 为偶数步&#xff0c;设所走的步数为 k &#xff0c;则 n*n-1mk&…

【电设控制与图像训练题】【激光打靶】【opencv测试代码以及效果】

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 规则 激光枪自动射击装置(E题) 【本科组】 一、任务 设计一个能够控制激光枪击发、自动报靶及自动瞄准等功能的电子系统。该…

.NET 小结之内存模型

.NET 小结之内存模型 为什么要解.NET 的内存模型 在.NET下的内存管理、垃圾回收其实大部分不需要我们操心&#xff0c;因为大部分.NET已经帮我们做了&#xff0c;通常情况下也不需要考虑这些。但是如果想要了解一些.NET一些稍微“底层”的原理&#xff0c;如&#xff1a;“装箱…

C ++ STL中的set :: upper_bound()函数

C STL set :: upper_bound()函数 (C STL set::upper_bound() function) set::upper_bound() function is a predefined function, it is used to get the upper bound of any element in a set. set :: upper_bound()函数是预定义的函数&#xff0c;用于获取集合中任何元素的上…

c语言if不能判断u8变量值,C语言变量名命规则.doc

C语言变量名命名规则一、程序风格&#xff1a;???????? 1、严格采用阶梯层次组织程序代码&#xff1a;???????? 各层次缩进的分格采用VC的缺省风格&#xff0c;即每层次缩进为4格&#xff0c;括号位于下一行。??? 要求相匹配的大括号在同一列&#xff0c;对…