您的位置:首页 > 移动开发

Windows Phone学习系列(一):添加Application Bar及多语言支持

2012-07-19 15:27 246 查看
一、创建Application Bar

  Application Bar和WinForm界面中菜单栏、状态栏等界面组成部分一样,是移动运用界面的一个组成部分,只是默认情况下是空的不可见的,开发人员可以根据需要创建Application Bar的实例并添加功能按钮。

  为运用添加Application Bar有两种方式,Xmal方式和后台代码的方式。

  Xmal方式很简单,创建一个Windows Phone项目后,打开MainPage.xaml文件,能够发现默认就有<phone:PhoneApplicationPage.ApplicationBar>这一段Xaml,只是被注释掉了,我们只需要去掉注释即可。

  如果通过代码的方式来添加方法如下,查看MainPage的基类PhoneApplicationPage,

View Code

<phone:PhoneApplicationPage.ApplicationBar>

<shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">

<shell:ApplicationBarIconButton IconUri="/Images/appbar.feature.email.rest.png" Text="btn1"/>

<shell:ApplicationBarIconButton IconUri="/Images/appbar.refresh.rest.png" Text="btn2"/>

<shell:ApplicationBar.MenuItems>

<shell:ApplicationBarMenuItem Text="mi1"/>

<shell:ApplicationBarMenuItem Text="mi2"/>

</shell:ApplicationBar.MenuItems>

</shell:ApplicationBar>

</phone:PhoneApplicationPage.ApplicationBar>


  按钮和目录的Text属性如果写成如下形式编译将无法通过:

Text=Localizedresources.ContentText, Source={StaticResource LocalizedStrings}}"


  看来只能在代码中通过属性来本地化了,我们拿第一个按钮来测试一下我们的想法,按常规思维,我们给按钮加上x:Name属性,如下:

<shell:ApplicationBarIconButton Text="btn1"  IconUri="/Images/appbar.feature.email.rest.png" Text="btn1"/>


  在MainPage()函数中添加如下代码:

btn1.Text = AppResource.ButtonText;


  编译没有问题,运行后发现抛出NullReferenceException异常,为什么?Google一下,能看的资源有限(就Google能搜点有用的东西,关键时候总被和谐,上火!),大概意思就是说ApplicationBar不是派生自FrameworkElement,因而不是页面visual tree的一部分,代码中无法通过x:Name来引用。真不知道是不是Bug?反正是不能这样搞那只能换个思路了,居然我们明明知道ApplicationBar是有两个按钮的,那么我们可以尝试一下如下方式:

((ApplicationBarIconButton)ApplicationBar.Buttons[0]).Text = AppResource.ButtonText;


  运行代码,发现果然可以!

  第一小节中我们提到添加ApplicatonBar有两种方式,刚才本地化是用的只是第一种方式,如果用第二种方式也就是代码的方式添加ApplicatonBar就不存在上面的问题了,把MainPage.xaml中ApplicationBar部分的代码注释掉,在MainPage()函数中添加如下代码:

ApplicationBar = new ApplicationBar();

ApplicationBar.Buttons.Add(new ApplicationBarIconButton(new Uri("/Images/appbar.feature.email.rest.png", UriKind.Relative)) { Text = AppResource.Button1Text });

ApplicationBar.MenuItems.Add(new ApplicationBarMenuItem(AppResource.MenuItem1Text));


  运行后发现满足我们的预期!

  到此,本文的内容就结束了,内容很简单,但是如果实际动手并动脑了你会发现文中提到的很多意外,而偏偏是这些意外加深了我们的理解,希望对大家有所帮助!

示例代码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: