吴佳鑫的个人专栏

当日事当日毕,没有任何借口

导航

修炼九阴真经Windows Phone开发 (7):本地化应用程序栏Localizing an Application Bar 下

本节介绍另一个本地化的方法:

在项目中添加资源文件:(这个文件将包含应用程序的默认语言的资源)

将要名称和值添加进去。(作为应用程序中向用户显示字符串值).

重复上面的方法,向项目中添加更多的其它语言资源文件。(参见后面的截图)

 

定义默认的区域

1.在解决方案资源管理器中,右键单击项目名称,选择属性,在application选项卡中,点 程序集信息。在非特定语言列表中,选择默认区域性。此标识语言的默认资源文件

中的字符串。例如,如果默认资源文件被命名为AppResources.resx,并在该文件中的字符串支持英语,则可以选择english作为项目的中立国语言。

 

添加LocalizedStrings类处理资源文件:

    public class LocalizedStrings
    {
        public LocalizedStrings()
        {
        }

        private static ApplicationBarSample.AppResources localizedresources = new ApplicationBarSample.AppResources();

        public ApplicationBarSample.AppResources Localizedresources { get { return localizedresources; } }

    }

 

主工程CS代码:

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.Shell;
using System.Globalization;
using System.Threading;

namespace ApplicationBarSample
{
    public partial class MainPage : PhoneApplicationPage
    {
        #region Initialization

        /// <summary>
        /// Constructor for the PhoneApplicationPage
        /// The ApplicationBar is initialized. Icon buttons and menu items are added
        /// to the ApplicationBar and event handlers are set.
        /// </summary>
        public MainPage()
        {
            InitializeComponent();

            this.SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;

            ApplicationBar = new ApplicationBar();
            ApplicationBar.IsMenuEnabled = true;
            ApplicationBar.IsVisible = true;
            ApplicationBar.Opacity = 1.0;

            ApplicationBarIconButton hide = new ApplicationBarIconButton(new Uri("/Images/expand.png", UriKind.Relative));
            //hide.Text = "hide";
            hide.Text = AppResources.ButtonText;
            hide.Click += new EventHandler(hide_Click);

            ApplicationBarIconButton opacity = new ApplicationBarIconButton(new Uri("/Images/opacity.png", UriKind.Relative));
            //opacity.Text = "opacity";
            opacity.Text = AppResources.ButtonText;
            opacity.Click += new EventHandler(opacity_Click);

            ApplicationBarIconButton enabled = new ApplicationBarIconButton(new Uri("/Images/menuenabled.png", UriKind.Relative));
            //enabled.Text = "enabled";
            enabled.Text = AppResources.ButtonText;
            enabled.Click += new EventHandler(enabled_Click);

            ApplicationBar.Buttons.Add(hide);
            ApplicationBar.Buttons.Add(opacity);
            ApplicationBar.Buttons.Add(enabled);

            //ApplicationBarMenuItem foregroundItem = new ApplicationBarMenuItem("use foreground color");
            ApplicationBarMenuItem foregroundItem = new ApplicationBarMenuItem(AppResources.MenuItemText);
            foregroundItem.Click += new EventHandler(foregroundItem_Click);

            //ApplicationBarMenuItem accentItem = new ApplicationBarMenuItem("use accent color");
            ApplicationBarMenuItem accentItem = new ApplicationBarMenuItem(AppResources.MenuItemText);
            accentItem.Click += new EventHandler(accentItem_Click);

            ApplicationBar.MenuItems.Add(foregroundItem);
            ApplicationBar.MenuItems.Add(accentItem);
            
            UpdateText();
        }

        #endregion

        #region User Iterface

        /// <summary>
        /// Click handler for accent color menu item.
        /// Changes the colored UI elements to the built-in PhoneAccentColor
        /// </summary>
        /// <param name="sender">The control that raised the click event.</param>
        /// <param name="e">An EventArgs object containing event data.</param>
        void accentItem_Click(object sender, EventArgs e)
        {
            UpdateColor((Color)Resources["PhoneAccentColor"]);
        }

        /// <summary>
        /// Click handler for accent color menu item.
        /// Changes the colored UI elements to the built-in PhoneForegroundColor
        /// </summary>
        /// <param name="sender">The control that raised the click event.</param>
        /// <param name="e">An EventArgs object containing event data.</param>
        void foregroundItem_Click(object sender, EventArgs e)
        {
            UpdateColor((Color)Resources["PhoneForegroundColor"]);
        }

        /// <summary>
        /// Click handler for opacity icon button.
        /// Sets the opacity value of the ApplicationBar to 0, 1, or .5
        /// </summary>
        /// <param name="sender">The control that raised the click event.</param>
        /// <param name="e">An EventArgs object containing event data.</param>
        void opacity_Click(object sender, EventArgs e)
        {
            if (ApplicationBar.Opacity < .01)
            {
                ApplicationBar.Opacity = 1;
            }
            else if (ApplicationBar.Opacity > .49 && ApplicationBar.Opacity < .51)
            {
                ApplicationBar.Opacity = 0;
            }
            else
            {
                ApplicationBar.Opacity = .5;
            }
            UpdateText();
        }

        /// <summary>
        /// Click handler for hide icon button.
        /// Changes the Visible property of the ApplicationBar to false
        /// And makes the "Show Application Bar" button visible
        /// </summary>
        /// <param name="sender">The control that raised the click event.</param>
        /// <param name="e">An EventArgs object containing event data.</param>
        void hide_Click(object sender, EventArgs e)
        {
            ApplicationBar.IsVisible = false;
            showButton.Visibility = Visibility.Visible;
            UpdateText();
        }

        /// <summary>
        /// Click handler for menu enable icon button.
        /// Changes the IsMenuEnabled property of the ApplicationBar
        /// When IsMenuEnabled is false, the menu will not pop up
        /// </summary>
        /// <param name="sender">The control that raised the click event.</param>
        /// <param name="e">An EventArgs object containing event data.</param>
        void enabled_Click(object sender, EventArgs e)
        {
            ApplicationBar.IsMenuEnabled = !ApplicationBar.IsMenuEnabled;
            UpdateText();
        }

        /// <summary>
        /// Click handler for show button.
        /// Sets the Visible property of the Application Bar to true
        /// </summary>
        /// <param name="sender">The control that raised the click event.</param>
        /// <param name="e">An EventArgs object containing event data.</param>
        private void showButton_Click(object sender, RoutedEventArgs e)
        {
            ApplicationBar.IsVisible = true;
            showButton.Visibility = Visibility.Collapsed;
            UpdateText();
        }

        /// <summary>
        /// Updates the TextBlock objects to reflect the current state
        /// of the ApplicationBar
        /// </summary>
        void UpdateText()
        {
            VisibleLabel.Text = "Application Bar Visible ";
            VisibleTextBlock.Text = ApplicationBar.IsVisible ? "Yes" : "No";

            OpacityLabel.Text = "Application Bar Opacity ";
            OpacityTextBlock.Text = ApplicationBar.Opacity.ToString("0.0");

            MenuEnabledLabel.Text = "MenuEnabled ";
            MenuEnabledTextBlock.Text = ApplicationBar.IsMenuEnabled ? "Yes" : "No";
        }

        /// <summary>
        /// Helper method for changing the color of the UI
        /// </summary>
        /// <param name="c">The new color for the UI elements</param>
        void UpdateColor(Color c)
        {
            SolidColorBrush brush = new SolidColorBrush(c);
            VisibleTextBlock.Foreground = brush;
            OpacityTextBlock.Foreground = brush;
            MenuEnabledTextBlock.Foreground = brush;

            ((LinearGradientBrush)Resources["Gradient"]).GradientStops[1].Color = c;
        }

        private void LocList_SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
        {
            // Set the current culture according to the selected locale and display information such as
            // date, time, currency, etc in the appropriate format.

            string nl;
            string cul;

            nl = locList.SelectedIndex.ToString();
            
            switch (nl)
            {

                case "0":
                    cul = "es-ES";
                   break;
                case "1":
                    cul = "de-DE";
                    break;
                case "2":
                    cul = "en-US";
                   break;
                default:
                    cul = "en-US";
                    break;
            }
            
            // set this thread's current culture to the culture associated with the selected locale
            CultureInfo newCulture = new CultureInfo(cul);
            Thread.CurrentThread.CurrentCulture = newCulture;

            CultureInfo cc, cuic;
            cc = Thread.CurrentThread.CurrentCulture;
            cuic = Thread.CurrentThread.CurrentUICulture;

            VisibleLabel.Text = cc.NativeName;
            VisibleTextBlock.Text = "";

            //OpacityLabel.Text = cuic.DisplayName;
            OpacityLabel.Text = "";
            OpacityTextBlock.Text = "";

            MenuEnabledLabel.Text = "";
            MenuEnabledTextBlock.Text = "";

            //localize icon button text      
            if (this.ApplicationBar.Buttons != null)
            {
                foreach (ApplicationBarIconButton btn in this.ApplicationBar.Buttons)
                {
                    btn.Text = cc.NativeName.Substring(0, cc.NativeName.ToString().Length/2);
                }
            }

            //localize menu buttons text
            if (this.ApplicationBar.MenuItems != null)
            {
                foreach (ApplicationBarMenuItem itm in this.ApplicationBar.MenuItems)
                {
                    itm.Text = cc.NativeName;
                }
            }
        }
        
        #endregion
    }
}

 

 

 

XAML代码:

<phone:PhoneApplicationPage 
    x:Class="PhoneApp6.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="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot 是包含所有页面内容的根网格-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel 包含应用程序的名称和页标题-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="页面名称" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - 在此处放置其他内容-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"></Grid>
    </Grid>
 
    <!--演示 ApplicationBar 用法的示例代码-->
    <phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="按钮 1"/>
            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="按钮 2"/>
            <shell:ApplicationBar.MenuItems>
                <shell:ApplicationBarMenuItem Text="菜单项 1"/>
                <shell:ApplicationBarMenuItem Text="菜单项 2"/>
            </shell:ApplicationBar.MenuItems>
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>

</phone:PhoneApplicationPage>

 

 

posted on 2012-04-26 22:52  _eagle  阅读(274)  评论(0编辑  收藏  举报