从零开始Windows Phone开发(三):第三个练习-IN_CASE_OF_EMERGENCY
来源:互联网 发布:天庭淘宝城txt全集下载 编辑:程序博客网 时间:2024/04/28 13:21
今天的练习是创建一个“紧急状况”的项目,涉及到的知识点有:屏幕的旋转,SIP(屏幕键盘)及处理按键时间,滚动视图,电话启动器。
1 界面设计
我们希望设计出来的界面是这样的:
当单击页面红色的标题时,拨号启动器被调用。各个文本框拥有自己的输入域,并且获得焦点的那个文本框默认全选文字。
1.1 涉及到的滚动视图问题
使用一个ScrollViewer将需要滚动的控件包裹在其中即可
1.2 输入域的问题
文本框的InputScope属性提供了11种不同类型的屏幕键盘,需要根据具体情况调用相应的键盘,通常需要实现导航到此页面自动弹出,通过处理回车事件达到额外的操作,限制输入值(需要手写代码)。
界面的代码如下所示:
<phone:PhoneApplicationPage x:Class="IN_CASE_OF_EMERGENCY.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="PortraitOrLandscape" shell:SystemTray.IsVisible="True"> <!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text="IN CASE OF EMERGENCY" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="tab here to dial!" Margin="9,-7,0,0" FontSize="64" Foreground="Red" MouseLeftButtonUp="PageTitle_MouseLeftButtonUp"/> </StackPanel> <!--ContentPanel - place additional content here--> <ScrollViewer Grid.Row="1"> <StackPanel Orientation="Vertical"> <TextBlock Text="Emergency contact people" Foreground="{StaticResource PhoneSubtleBrush}" Margin="24,5,0,2"/> <TextBox x:Name="Ecp" InputScope="PersonalFullName" Margin="{StaticResource PhoneHorizontalMargin}" KeyDown="BoxKeyDown_Event" GotFocus="Box_GotFocus"/> <TextBlock Text="Emergency contact people number" Foreground="{StaticResource PhoneSubtleBrush}" Margin="24,5,0,2"/> <TextBox x:Name="Ecn" InputScope="TelephoneNumber" Margin="{StaticResource PhoneHorizontalMargin}" KeyDown="BoxKeyDown_Event" GotFocus="Box_GotFocus"/> <TextBlock Text="Phone owner name" Foreground="{StaticResource PhoneSubtleBrush}" Margin="24,5,0,2"/> <TextBox x:Name="Pon" InputScope="PersonalFullName" Margin="{StaticResource PhoneHorizontalMargin}" KeyDown="BoxKeyDown_Event" GotFocus="Box_GotFocus" /> <TextBlock Text="Phone owner's medical notes" Foreground="{StaticResource PhoneSubtleBrush}" Margin="24,5,0,2"/> <TextBox x:Name="Pomn" InputScope="Text" Margin="{StaticResource PhoneHorizontalMargin}" AcceptsReturn="True" TextWrapping="Wrap" MinHeight="250" KeyDown="BoxKeyDown_Event" GotFocus="Box_GotFocus"/> </StackPanel> </ScrollViewer> </Grid></phone:PhoneApplicationPage>
2 后端代码
2.1 实现拨号启动器的功能
private void PageTitle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { PhoneCallTask phoneLauncher = new PhoneCallTask(); phoneLauncher.DisplayName = this.Ecp.Text; phoneLauncher.PhoneNumber = this.Ecn.Text; //当号码不为空时,拨号 if (phoneLauncher.PhoneNumber.Length == 0) { MessageBox.Show("There is no emergency contact phone number to call!", "Phone", MessageBoxButton.OK); } else phoneLauncher.Show(); }
效果如下图:
2.2 处理全选消息
private void Box_GotFocus(object sender, RoutedEventArgs e) { (sender as TextBox).SelectAll(); }
效果见下图:
2.3 实现按键消息处理
主要是实现将输入焦点进行传递的功能,要注意最后一个文本框的回车在这里面表示换行,所以我们要去掉最后一个文本框的绑定事件KeyDown。
private void BoxKeyDown_Event(object sender, KeyEventArgs e) { if(e.Key == Key.Enter) { if (sender == this.Ecp) this.Ecn.Focus(); else if (sender == this.Ecn) this.Pon.Focus(); else if (sender == this.Pon) this.Pomn.Focus(); e.Handled = true; } }
2.4 实现独立属性设置,实现导航自动填充
使用IsolatedStorageSettings实现四个信息的保存和提取,在onNavigatingFrom和onNavigatingTo的时候更新存储,不再贴出代码。
还有个小bug就是当出现数字键盘时,没有回车键可用来转移焦点,但是对于有键盘的手机来说这不是问题。。。
另外,屏幕旋转的效果没贴出来,可以在旋转时添加相应的事件,同时还要考虑你的应用到底需不需要支持旋转,如果希望灵活一点,可以考虑添加锁定旋转的功能,后面再讨论。
- 从零开始Windows Phone开发(三):第三个练习-IN_CASE_OF_EMERGENCY
- 从零开始Windows Phone开发(二):第二个练习-Flashlight
- 从零开始Windows Phone开发(五):第五个练习——BabySignLanguage
- 从零开始Windows Phone开发(一):综述及第一个练习
- 从零开始Windows Phone开发(四):第四个练习Stopwatch
- Windows PHONE 7从零开始开发
- Windows Phone 开发学习笔记(三)Hello Windows Phone之深藏不露
- Windows Phone开发(三)-- 导航原理分析
- windows phone 8 开发学习笔记(三)
- Windows Phone开发(46):与Socket有个约会
- Windows Phone开发学习之三——建立第一个WP7项目
- 8个Windows Phone开发工具
- windows phone:图片(三)
- windows phone:动画(三)
- Windows Phone 8初学者开发—第3部分:编写第一个Windows Phone 8应用程序
- Sliverlight for Windows Phone 7 开发系列(2): 第一个Sliverlight程序
- Silverlight for Windows Phone 7开发系列(2):第一个Silverlight程序
- Windows Phone 7之初体验(三.开发问答(转发))
- 第十四周——数组冒泡定义排序
- 显示代码原型
- 返回上一层activity的实现方式(拓展:不同activity间的任意跳转)
- ios隐藏status bar
- Hidden Password-最小表示法
- 从零开始Windows Phone开发(三):第三个练习-IN_CASE_OF_EMERGENCY
- How many ways-dp
- 求很多数最大公约数(用数组)
- 解构微信(二):团队是研究院、艺术中心甚至学校
- How many-字典树+最小表示法
- int在64位机或64位编译器中到底占用几个字节
- stl stack
- Intervals-bellman-ford+差分约束
- nginx日志类解读