打开VS2010,找到上次建立的Phone1项目。
试着运行一下,小生的机器是酷睿2 Q9400 4核CPU + 4GB RAM,还算对得起观众,但第一次运行WP7模拟器,还稍稍慢了少许,用时在6-8秒左右,比起Eclipse启动安卓模拟器,其实微软真的很给力了!
启动后,在模拟器程序列表中选择 PhoneApp1,出现程序画面:
与 Android / Apple 开发一样,VS2010在程序修改后,会自动部署到模拟器。
而VS2010的稳定性毋容置疑,毕竟是最好的IDE,没有之一,使用至今,很少发生如Eclipse因为内存、操作系统、第三方软件兼容性等莫名其妙的原因当掉的状况。
因此强烈建议模拟器启动后,就放着好了。人生有几个8秒,我们只争朝夕!
实现登录业务流程,界面前端必须有窗口给予用户输入用户名及密码。
1:添加控件引用
WP7的控件,大多都在使用sil控件,因此可以考虑使用sil的ChildWindow模式弹出框控件,此ChildWindow并不属于默认控件,因此需要在 项目 - 添加引用,在 X:\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries\Client 下找到 System.Windows.Controls.dll 引用到项目中。
2:设计登录框
在解决方案面板中 新建文件夹 Login,创建一个纵向页面。注意:因为APP程序是应用在电话上,所谓寸土寸金,因此在WinForm、Web上不太重视的可视空间问题,在APP的前端美工中占有重要地位。
为了腾出空间展示输入法,因此选择比较容易设计的纵向,而不是横向页面。
此页面应该继承自 ChildWindow 控件,这样才能成为模式对话框,show出来遮盖住下方主页面。并且为了给输入法控件,Height(高)属性必须表现为顶住最上方或附着于最下方,最后的Xaml代码如下:
<tk:ChildWindow
x:Class="PhoneApp1.Login.LoginPop"
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"
xmlns:tk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
mc:Ignorable="d" VerticalAlignment="Top" HorizontalAlignment="Left"
BorderBrush="Black" BorderThickness="2" HasCloseButton="False"
d:DesignHeight="256" d:DesignWidth="480" Title="看看呗" >
<!--LayoutRoot 是包含所有页面内容的根网格-->
<Grid x:Name="LayoutRoot" Height="202" Background="{StaticResource PhoneBackgroundBrush}">
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="用户名: " VerticalAlignment="Top" Margin="20,43,0,0"/>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="密 码: " VerticalAlignment="Top" Margin="20,104,0,0"/>
<TextBox x:Name="txtUserId" VerticalAlignment="Top" Margin="117,23,8,0" Height="62" FontSize="18.667" TabIndex="1" >
<PasswordBox x:Name="txtPassword" VerticalAlignment="Top" Margin="117,85,8,0" Height="62" FontSize="18.667" TabIndex="2" />
<Button x:Name="btn_sub" Content="开门" Margin="117,132,214,0" d:LayoutOverrides="Width" FontSize="18.667" BorderBrush="{StaticResource PhoneAccentBrush}" BorderThickness="1" Foreground="{StaticResource PhoneForegroundBrush}" Background="{StaticResource PhoneInactiveBrush}" Height="58" VerticalAlignment="Top" FontFamily="Tahoma" TabIndex="3" />
<TextBlock Height="30" HorizontalAlignment="Left" Margin="252,146,0,0" Name="lbl_error" Text="" VerticalAlignment="Top" Width="184" />
</Grid>
</tk:ChildWindow>
几个重要属性:
<tk:ChildWindow 表示继承自xmlns:tk,也就是 ChildWindow所在的dll -- System.Windows.Controls
HasCloseButton="False" 表示左上角没有那个对话框常有的 X
3:点击【进去看看】,show出登陆对话框
返回 MainPage.xaml 页面,给【进去看看】 btn_login 按钮添加点击事件代码
private void btn_login_Click(object sender, RoutedEventArgs e)
{
LoginPop login = new LoginPop();
login.Show();
}
4:给登录框中【开门】添加数据校验代码
打开LoginPop页面,给【开门】 btn_sub添加点击事件 加入校验代码
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
if(txtUserId .Text .Trim ().Equals(""))
{
lbl_error.Text = "用户名不能为空!";
txtUserId.Text = "";
return;
}
if (txtPassword.Password.Trim().Equals(""))
{
lbl_error.Text = "密码不能为空!";
txtPassword.Password = "";
return;
}
}
至此,大功告成,打完收工!
运行后点击【进去看看】,得到如下画面:
感想:
从用户角度来看,微软寄予厚望的芒果系统,虽然比起WP6之前的系统有很大改进(是从0开始推翻重做)全新的系统,但还是偏向于其所擅长的中规中矩的商业UI定位,与安卓、苹果所体现夺人眼球、目不暇接的UI界面设计和应用,还是有着不小的距离。
从开发者角度看,芒果系统靠Sil(银光)与C#语言做底层,依附于VS2010平台开发,有着安卓开发不能比拟的优势,稳定性、开发效率、兼容性、语言功能都很好。只是接触未免太浅,可否叫板安卓与苹果的开发体验,不敢妄下断言。但肯定的是,WP7欠缺的 还是挺多,但愿微软强大的.NET和美刀,能把芒果推上与安卓/苹果对抗的神坛 !
程序到这里,只缺最后的目标,使用WCF服务连接后端服务器验证用户,实现登录!