热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

windowsphone7学习笔记07——系统托盘和应用程序栏

系统托盘系统托盘仅仅显示一些系统的状态,有时候我们要隐藏它,用下面的代码:this.SetValue(SystemTray.IsVisib

  系统托盘

  系统托盘仅仅显示一些系统的状态,有时候我们要隐藏它,用下面的代码:

this.SetValue(SystemTray.IsVisibleProperty,!(bool)this.GetValue(SystemTray.IsVisibleProperty));

  注意不要忘了引入Microsoft.Phone.Shell这一命名空间。


  应用程序栏

  1、使用XAML生成应用程序栏

  Windows Phone SDK 附带的页面模板包含被注释掉的示例应用程序栏的 XAML。取消 XAML 的注释以创建应用程序栏。如:


"True" IsMenuEnabled="True">
"/Images/appbar_button1.png" Text="Button 1"/>
"/Images/appbar_button2.png" Text="Button 2"/>

"MenuItem 1"/>
"MenuItem 2"/>


  增删改点内容就可以用了,要注意引用的图片需要把属性修改为content


  2、使用C#生成应用程序栏

  有时应用程序栏需要根据用户的操作来改变应用程序栏的一些设置,这样通过XAML生成应用程序栏就行不通了,所以需要通过C#来生成应用程序栏。

  (1)在代码的顶部,添加Microsoft.Phone.Shell这一命名空间。

using Microsoft.Phone.Shell;


  (2)在页面的构造函数中,在对 InitializeComponent 的调用之后,添加以下代码。该代码初始化新的 ApplicationBar 对象并将该对象分配给页面的 ApplicationBar 属性。

ApplicationBar = new ApplicationBar();


  (3)设置所需的应用程序栏属性。

ApplicationBar.Mode = ApplicationBarMode.Default;
ApplicationBar.Opacity = 1.0;
ApplicationBar.IsVisible = true;
ApplicationBar.IsMenuEnabled = true;


  (4)根据需要创建一个或多个 ApplicationBarIconButton 对象。设置图标图像和按钮文本,然后将它们添加到应用程序栏。如果您未设置按钮文本,则会发生运行时异常。

ApplicationBarIconButton button1 = new ApplicationBarIconButton();
button1.IconUri = new Uri("/Images/YourImage.png", UriKind.Relative);
button1.Text = "button 1";
ApplicationBar.Buttons.Add(button1);


  (5)菜单项是可选的。根据需要创建一个或多个 ApplicationBarMenuItem 对象。设置文本,然后将它们添加到应用程序栏。

ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem();
menuItem1.Text = "menu item 1";
ApplicationBar.MenuItems.Add(menuItem1);


  (6)下面是一个已完成的应用程序栏示例。

public MainPage()
{
InitializeComponent();

ApplicationBar = new ApplicationBar();

ApplicationBar.Mode = ApplicationBarMode.Default;
ApplicationBar.Opacity = 1.0;
ApplicationBar.IsVisible = true;
ApplicationBar.IsMenuEnabled = true;

ApplicationBarIconButton button1 = new ApplicationBarIconButton();
button1.IconUri = new Uri("/Images/YourImage.png", UriKind.Relative);
button1.Text = "button 1";
ApplicationBar.Buttons.Add(button1);

ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem();
menuItem1.Text = "menu item 1";
ApplicationBar.MenuItems.Add(menuItem1);
}


  (7)对于每个图标按钮和菜单项,确定用户单击时要调用的事件。下面是来自上一过程的、确定了单击事件的应用程序栏的示例。

ApplicationBarIconButton button1 = new ApplicationBarIconButton();
button1.IconUri = new Uri("/Images/YourImage.png", UriKind.Relative);
button1.Text = "button 1";
ApplicationBar.Buttons.Add(button1);
button1.Click += new EventHandler(button1_Click);

ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem();
menuItem1.Text = "menu item 1";
ApplicationBar.MenuItems.Add(menuItem1);
menuItem1.Click += new EventHandler(menuItem1_Click);


  (8)对于每个图标按钮和菜单项,添加用户单击时要调用的事件。在页面类中添加代码。下面是来自上一过程的应用程序栏的单击事件示例。

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Button 1 works!");
//Do work for your application here.
}

private void menuItem1_Click(object sender, EventArgs e)
{
MessageBox.Show("Menu item 1 works!");
//Do work for your application here.
}


  3、透明度

  透明度可以设置为0到1的数值,但是推荐使用0,0.5或者是1。如:

shell:ApplicationBar IsVisible=“True” IsMenuEnabled=“True” Opacity=“0.5


  4、使用Expression Blend 创建应用程序栏

  (1)先解开注释掉的ApplicationBar;

  (2)右键该页面使用Expression Blend 打开;

  

 

  (3)打开此页面后,看到Expression Blend 左边的面板上Objects and Timeline 面板;

  

 

  (4)如上面板的内容,微软为我们默认添加了两个ApplicationBarIconButton(最多四个)和两个ApplicationBarMenuItem,下面编辑这四个节点的内容,并为其添加点击事件和图片内容。点击第一个ApplicationBarMenuItem,中间的显示图效果自动定位并显示,如下图:

  

 

  (5)视角右移到右上角,并选中第一个选项卡:元素属性,面板的最右边有两个选择图标。如下图所示,蓝色箭头代码元素的基本属性(包括Name和Text,其他UI有更多属性这里不详细介绍),红色箭头代表该元素的事件;

  

 

  (6)好了,认识了一些基本的原理,下面来改改吧,将Name 改为“AboutApplicationBar ”。然后,将对应的Text 改为“关于”。转到事件面板,双击它,它会自动帮我们在CS代码里面生成一个事件句柄,像这样:

  

 

  (7)根据上面的操作,将下面的ApplicationBarMenuItem改为“查看图片”的菜单。下面来做ApplicationBarIconButton,具体操作跟上面是一致的,唯一区别的是ApplicationBarIconButton 需要一个图片资源,利用Expresssion Blend 可以很方便的为其添加图片资源,并且这些图片资源都是微软建议使用的图片,选中ApplicationBarIconButton 会看到面板属性比上面的MenuItem多了一个属性,如下图这个属性是一个图片的地址,并且它是一个下拉框允许我们选择,看看图吧:

  

  

  ps:这些图片位于C:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Icons 目录。


  补充:(1)由于应用程序栏不是 Silverlight 控件,并不继承自FrameworkElement,因此应用程序栏不支持某些常见的控件功能,如数据绑定。这意味着不能通过使用 XAML 格式的名称属性来更改图标按钮和菜单项。如果您希望在运行时动态修改文本或图标,则应该使用 C# 或 Visual Basic 创建应用程序栏,详见上面的通过C#生成应用程序栏。


       (2)在有些情况下我们会需要提供横跨整个应用程序的通用功能,这样,如果一个一个页面的显示ApplicationBar,这样效率很低,所以可以写一个通用的ApplicationBar,提供给整个应用程序使用。

     由于是提供给整个应用程序使用,所以需要在App.xaml 注册,如:


"MainAppBar" IsVisible="True">


"About" Click="ApplicationBarMenuItem_Click"/>




"Web" IconUri="ie_icon.png" Click="ApplicationBarIconButton_Click"/>
"Images" IconUri="pictures_Icon.png" Click="ImageEvent_Click"/>


    进入APP.xaml.cs在自动生成的事件中,键入代码:

private void ApplicationBarMenuItem_Click(object sender, EventArgs e)
{
PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;
root.Navigate(new Uri("/About", UriKind.Relative));
}

private void ApplicationBarIconButton_Click(object sender, EventArgs e)
{

}

private void ImageEvent_Click(object sender, EventArgs e)
{
PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;
root.Navigate(new Uri("/Pictures",UriKind.Relative));
}


    这样ApplicationBar就已经注册好了,在需要显示应用程序栏的页面的phone:PhoneApplicationPage节点指定ApplicationBar来源,比如本文的指定方式:

x:Class="DataBind.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"
ApplicationBar="{StaticResource MainAppBar}"
>


  好了,终于整理完了,欢迎补充。。。

  参考文章:http://terryblog.blog.51cto.com/1764499/461551

转:https://www.cnblogs.com/zhangkai2237/archive/2012/02/14/2351372.html



推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
author-avatar
涅槃WB
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有