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

    [索引页]
    [源码下载]


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



    作者: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
    [源码下载]

  • 相关阅读:
    大话设计模式——UML图
    IdentityServer3零星笔记
    Angular路由
    基于jquery的静态页面翻页
    00_python安装与配置(mac)
    OracleParameter.UdtTypeName的值必须是全大写!
    VS2012调用64位IIS Express
    MVC中使用Ueditor
    优秀博客站点
    jqGrid中的formatter
  • 原文地址:https://www.cnblogs.com/webabcd/p/2672807.html
Copyright © 2011-2022 走看看