windows phone开发学习(2)

今天的主要内容有

1.处理屏幕旋转的问题,使我联想到wp8自带的计算器就和这方面的内容有关,横屏与竖屏所展现出来的是不一样的。

如果只是把xaml文件里的SupportedOrientations改为LandscapeOrPortrait,这样的话当屏幕方向改变时只是死板地适应屏幕而已,甚至一些效果都会失去,所以要加入处理屏幕方向改变这样的事件处理来处理这个事件,在xaml文件属性设置里添加OrientationChanged如下所示:OrientationChanged="PhoneApplicationPage_OrientationChanged"

然后在对应页面里添加事件

privatevoidPhoneApplicationPage_OrientationChanged(objectsender,OrientationChangedEventArgs e)

        {//如果屏幕方向是横向的

            if(e.Orientation== PageOrientation.Landscape||e.Orientation ==PageOrientation.LandscapeLeft||e.Orientation ==PageOrientation.LandscapeRight)

            {//在这里添加对应的处理方法

}

        }

2.页面之间进行导航的问题,也就是不同页面之间互相切换的问题,当然还有不同页面之间传递参数的问题。

首先是页面切换的问题,有两种方法,第一种:在当前页面内添加控件hyperlinkButton,然后设置好一般的属性比如位置,大小,等等,再把NavigateUri的值设置为/page1.xaml,这里page1.xaml即为要跳转到的第二个页面

                                  第二种:用代码的方式实现,比如说在主页面添加一个按钮,然后把这个按钮的处理处理事件设置为跳转页面的动作,则用户在点击这个按钮的时候就能够实现页面的跳转,在xaml里添加控件不用多说,主要是在页面代码里的事件:

  privatevoidbutton1_Click(object sender,RoutedEventArgse)

        {

            this.NavigationService.Navigate(newUri("/Page1.xaml",UriKind.Relative));

        }

在这里也要强调一点,在xaml里要声明Click为button1_Click,这点我调试的时候忘记了,再一个就是事件处理方法里面的内容,调用导航服务(我自己这么理解)的导航方法跳转到第二个页面

 

3.两个需要注意的方法

OnNavigatedFrom和OnNavigatedTo,这两个方法分别在当前页面和跳转后的页面内执行,在跳转之前要保存数据或者什么的可以写在OnNavigatedFrom里面,而在跳转到新页面之后要做什么准备工作的可以写到OnNavigatedTo这个方法里,现先这么觉得,可能也有别的方法。

 

4.页面之间参数传递的问题

这个应该是最重要的问题,在android开发里Activity之间传递内容时候是利用intent对象实现的,而在这里page之间传递参数的手段是在Uri里面附加上参数即可,具体代码如下:privatevoidbutton1_Click(object sender,RoutedEventArgse)

        {

            this.NavigationService.Navigate(newUri("/Page1.xaml?str="+textbox1.Text,UriKind.Relative));

        }

在处理点击事件的时候附带参数把文本内容传递过去,在page1.cs文件里进行接收,用到刚才的那个OnNavigatedTo方法,具体代码如下:

protectedoverridevoidOnNavigatedTo(NavigationEventArgs e)

        {

            base.OnNavigatedTo(e);

            this.textblock1.Text= this.NavigationContext.QueryString["str"];

 

        }

关于页面之间的导航还有几个问题需要注意,可以代码实现后退键的功能,虽然手机本身有回退键,也可以屏蔽掉系统的回退实体键,也可以消除回退历史,比如从A到B再到C,这样回退的话只能从C回退到B,然后再回退到A,我们可以直接从C回退到A,代码如下:

1.  protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)  

2.  {  

3.      base.OnNavigatedFrom(e);  

4.      PhoneApplicationFrame myFrame = Application.Current.RootVisual as PhoneApplicationFrame;  

5.      if (myFrame != null)  

6.      {  

7.          try  

8.          {  

9.              myFrame.RemoveBackEntry();  

10.         }  

11.         catch (InvalidOperationException ex)  

12.         {  

13.             MessageBox.Show(ex.Message);  

14.         }  

15.     }  

16.   

17. }  

在这里,我们使用PhoneApplicationFrame类的RemoveBackEntry方法删除最新一条记录,每次只删除一条,要删除多条,就调用N次。因为导航历史记录是栈结构的,后进先出,所以,就像你拿一堆书放在桌面上一样,首先拿掉的是放在最上面的,如下图所示:从例子中看到,使用PhoneApplicationFrame类的RemoveBackEntry方法删除最新一条记录,每次只删除一条,要删除多条,就调用N次。因为导航历史记录是栈结构的,后进先出,所以,就像你拿一堆书放在桌面上一样,首先拿掉的是放在最上面的。

5.比如说这里有几个按钮,我们要给他们设定固定的样式style,我们可以一个一个地给每一个按钮设定样式,多几个ctrl+cctrl+v,但是这样还是很臃肿,我们可以把style封装成一个资源集合类,然后给这些按钮设置style即可,这就省去了很多代码,具体代码如下:

1.  <phone:PhoneApplicationPage   

2.      x:Class="ResSampleApp.Page2"  

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" d:DesignHeight="768" d:DesignWidth="480"  

14.     shell:SystemTray.IsVisible="True">  

15.     <phone:PhoneApplicationPage.Resources>  

16.         <Style x:Key="buttonStyle" TargetType="Button">  

17.             <Setter Property="Background">  

18.                 <Setter.Value>  

19.                     <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">  

20.                         <GradientStop Color="Yellow" Offset="0"/>  

21.                         <GradientStop Color="Red" Offset="1"/>  

22.                     </LinearGradientBrush>  

23.                 </Setter.Value>  

24.             </Setter>  

25.             <Setter Property="HorizontalAlignment" Value="Left"/>  

26.             <Setter Property="VerticalAlignment" Value="Top"/>  

27.             <Setter Property="Width" Value="185"/>  

28.             <Setter Property="Height" Value="50"/>  

29.             <Setter Property="BorderThickness" Value="0"/>  

30.         </Style>  

31.     </phone:PhoneApplicationPage.Resources>  

32.   

33.     <Grid>  

34.         <Button Content="按钮一" Height="72"  Margin="10,10,0,0" Name="button1" Style="{StaticResource buttonStyle}" />  

35.         <Button Content="按钮二" Height="72"  Margin="10,92,0,0" Name="button2" Style="{StaticResource buttonStyle}" />  

36.         <Button Content="按钮三" Height="72"  Margin="10,174,0,0" Name="button3" Style="{StaticResource buttonStyle}" />  

37.     </Grid>  

38.   

39.   

40. </phone:PhoneApplicationPage>  

开始部分和一般的xaml开头一样,都是这个页面的整体属性,关键在Phone.PhoneApplicationPage.Resources 这个资源集合里,在这里一次性地设置了相关属性,于是我们在给每个Button设置style的时候就简单多了,注意引用资源文件的方式,一对大括号里面有StaticResources,表示静态属性,那动态属性呢?好吧,这又是一个问题。这样一来,我们就省去了很多代码。这是设置后的样式:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值