您的位置:首页 > Web前端

与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密

2014-02-22 22:17 519 查看
原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密[索引页]
[源码下载]

[align=center]与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密[/align]

作者:webabcd

介绍
与众不同 windows phone 7.5 (sdk 7.1) 之特性

手机方向

本地化

应用程序的试用体验

系统主题资源

本地数据的加密解密

示例
1、演示如何响应手机的方向变化
Orientation.xaml

<phone:PhoneApplicationPage
x:Class="Demo.Feature.Orientation"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
shell:SystemTray.IsVisible="True">

<Grid x:Name="LayoutRoot" Background="Transparent">

<TextBlock Text="改变手机方向,以查看演示效果" />

</Grid>

</phone:PhoneApplicationPage>


Orientation.xaml.cs

/*
* 演示如何捕获手机方向改变的事件
*
* PhoneApplicationPage - 页面
*     SupportedOrientations - 支持的方向(Microsoft.Phone.Controls.SupportedPageOrientation 枚举)
*         Portrait(竖), Landscape(横), PortraitOrLandscape(横竖)
*     Orientation - 当前的方向(Microsoft.Phone.Controls.PageOrientation 枚举)
*         None, Portrait, Landscape, PortraitUp, PortraitDown(目前不支持), LandscapeLeft(PortraitUp 逆时针转到 Landscape), LandscapeRight(PortraitUp 顺时针转到 Landscape)
*     OrientationChanged - 方向改变后触发的事件(事件参数:OrientationChangedEventArgs)
*
* OrientationChangedEventArgs
*     Orientation - 当前的页面方向
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

namespace Demo.Feature
{
public partial class Orientation : PhoneApplicationPage
{
public Orientation()
{
InitializeComponent();

this.SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;
this.OrientationChanged += new EventHandler<OrientationChangedEventArgs>(Orientation_OrientationChanged);
}

void Orientation_OrientationChanged(object sender, OrientationChangedEventArgs e)
{
if ((e.Orientation & PageOrientation.Portrait) == (PageOrientation.Portrait))
{
MessageBox.Show("竖放");
}
else
{
MessageBox.Show("横放");
}
}
}
}


2、演示如何实现程序的本地化
Localization.xaml

<phone:PhoneApplicationPage
x:Class="Demo.Feature.Localization"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
shell:SystemTray.IsVisible="True">

<phone:PhoneApplicationPage.Resources>
<!--
注:AppResources 里的类和构造函数需要 public 的要手动改成 public
-->
<resources:AppResources xmlns:resources="clr-namespace:Demo.Resources" x:Key="MyLocalization" />
</phone:PhoneApplicationPage.Resources>

<Grid x:Name="LayoutRoot" Background="Transparent">
<StackPanel Orientation="Vertical">

<TextBlock Name="lblMsg" />

<!--
xaml 方式应用本地化
-->
<TextBlock Text="{Binding Path=Software, Source={StaticResource MyLocalization}}" />

</StackPanel>
</Grid>

</phone:PhoneApplicationPage>


Localization.xaml.cs

/*
* 演示如何本地化应用程序,相关资源文件在 Resources 目录下
*
* 注:本地化应用程序标题(标题分为两种:应用程序列表中的标题和“磁贴”上的应用程序标题,它们可以不同)请参看 http://msdn.microsoft.com/en-us/library/ff967550(v=vs.92).aspx */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

using Demo.Resources;

namespace Demo.Feature
{
public partial class Localization : PhoneApplicationPage
{
public Localization()
{
InitializeComponent();

// 代码方式应用本地化
lblMsg.Text = AppResources.Network;
}
}
}


3、演示如何提供支持试用体验的应用程序
TrialExperience.xaml

<phone:PhoneApplicationPage
x:Class="Demo.Feature.TrialExperience"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
shell:SystemTray.IsVisible="True">

<Grid x:Name="LayoutRoot" Background="Transparent">
<StackPanel Orientation="Vertical">

<Button Name="btnTrial" Content="试用版可用的功能" Click="btnTrial_Click" />

<Button Name="btnNormal" Content="正式版里才有的功能" Click="btnNormal_Click" />

<Button Name="btnBuy" Content="购买正式版" Click="btnBuy_Click" />

</StackPanel>
</Grid>

</phone:PhoneApplicationPage>


TrialExperience.xaml.cs

/*
* 演示如何在收费应用程序中加入试用体验
*
* LicenseInformation - 应用程序的许可证信息
*     IsTrial() - 是否是试用版
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

using Microsoft.Phone.Marketplace;
using Microsoft.Phone.Tasks;

namespace Demo.Feature
{
public partial class TrialExperience : PhoneApplicationPage
{
private static LicenseInformation _licenseInfo = new LicenseInformation();

private static bool _isTrial = true;

public TrialExperience()
{
InitializeComponent();

// 检查许可证,仅为测试用,实际项目中最好将此逻辑放到 Application_Launching 和 Application_Activated 中
CheckLicense();
}

private void CheckLicense()
{
#if DEBUG
// 仅调试用,强行指定程序为试用版
_isTrial = true;
#else
// 获取当前安装到设备的版本是否为试用版
_isTrial = _licenseInfo.IsTrial();
#endif

// 如果是试用版则禁用正式版的功能
if (_isTrial)
btnNormal.IsEnabled = false;
}

private void btnTrial_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("试用版可用的功能");
}

private void btnNormal_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("正式版里才有的功能");
}

private void btnBuy_Click(object sender, RoutedEventArgs e)
{
// 购买的话,直接打开应用程序在商店的详细页就好
MarketplaceDetailTask marketPlaceDetailTask = new MarketplaceDetailTask();
marketPlaceDetailTask.Show();
}
}
}


4、演示如何使用系统主题资源
ThemeResources.xaml

<phone:PhoneApplicationPage
x:Class="Demo.Feature.ThemeResources"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
shell:SystemTray.IsVisible="True">

<Grid x:Name="LayoutRoot" Background="Transparent">

<TextBlock Text="使用系统主题资源" Style="{StaticResource PhoneTextExtraLargeStyle}" />

<HyperlinkButton Content="全部系统主题资源" NavigateUri="http://msdn.microsoft.com/en-us/library/ff769552(v=vs.92)" TargetName="_blank" />

</Grid>

</phone:PhoneApplicationPage>


5、演示如何实现本地数据的加密解密
EncryptData.xaml

<phone:PhoneApplicationPage
x:Class="Demo.Feature.EncryptData"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
shell:SystemTray.IsVisible="True">

<Grid x:Name="LayoutRoot" Background="Transparent">

<TextBlock Text="注:不同的应用程序有不同的密钥" />

</Grid>

</phone:PhoneApplicationPage>


EncryptData.xaml.cs

/*
* 演示如何对数据做加密解密
*
* ProtectedData - 用于加密解密数据
*     Protect() - 加密数据
*     Unprotect() - 解密数据
*
* 注:不同的应用程序有不同的密钥,所以本示例的加密解密仅针对同一应用程序有效。应用场景为:本地数据的加密解密
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

using System.Security.Cryptography;
using System.Text;

namespace Demo.Feature
{
public partial class EncryptData : PhoneApplicationPage
{
private string _base64 = "";

public EncryptData()
{
InitializeComponent();

EncryptDemo();

DecryptDemo();
}

private void EncryptDemo()
{
byte[] plainText = Encoding.UTF8.GetBytes("webabcd");
byte[] protectedData = ProtectedData.Protect(plainText, null);

_base64 = Convert.ToBase64String(protectedData);

MessageBox.Show("字符串“webabcd”加密且base64后的数据:" + Environment.NewLine + _base64);
}

private void DecryptDemo()
{
byte[] protectedData = Convert.FromBase64String(_base64);
byte[] plainText = ProtectedData.Unprotect(protectedData, null);

MessageBox.Show("解密后的数据:" + Environment.NewLine + Encoding.UTF8.GetString(plainText, 0, plainText.Length));
}
}
}


OK
[源码下载]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐