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

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

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

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

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

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

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

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

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

public partial class Solution2 : PhoneApplicationPage{List
UserControlList;//当前集合的显示项的索引int index = 0;public Solution2(){InitializeComponent();//Demo:直接实例化UserControl的集合。UserControlList = new List
(){new WindowsPhoneControl1(),new WindowsPhoneControl2(),new WindowsPhoneControl3(),new WindowsPhoneControl4(),new WindowsPhoneControl5()};}private void PhoneApplicationPage_Loaded_1(object sender, RoutedEventArgs e){//Demo:首次加载集合的第一项this.ContentPanel.Children.Add(UserControlList[0]);}private void ContentPanel_ManipulationDelta_1(object sender, System.Windows.Input.ManipulationDeltaEventArgs e){//页面ContentPanel容器只能左右拖动不能上下拖动。transform.TranslateX += e.DeltaManipulation.Translation.X;transform.TranslateY = 0;}private void ContentPanel_ManipulationCompleted_1(object sender, System.Windows.Input.ManipulationCompletedEventArgs e){//ContentPanel容器总转换的线性运动的X坐标值〉=100if (e.TotalManipulation.Translation.X >= 100){//加载前一项if (this.index == 0){MessageBox.Show("当前为第一项");}else{index -= 1;//加载前一条数据this.ContentPanel.Children.Clear();this.ContentPanel.Children.Add(UserControlList[index]);}}//ContentPanel容器总转换的线性运动的X坐标值〈=-100else if (e.TotalManipulation.Translation.X <= -100){//加载后一项if(this.index==4){MessageBox.Show("当前为最后一项");}else{index += 1;//加载后一条数据this.ContentPanel.Children.Clear();this.ContentPanel.Children.Add(UserControlList[index]);}}//切换之后恢复ContentPanel容器的X偏移量.transform.TranslateX = 0;}}
通过以上的操作,我们就可以左右滑动切换刚才定义的5个不同用户自定义控件了。

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