您的位置:软件 > 开发者网络 > 技术跟踪 > Windows编程 > 正文
Longhorn应用开发部署初探
[文章信息]
作者:winsome zhong编译
时间:2003-11-25
出处:MSDN
责任编辑:方舟
[文章导读]
本文将带领大家体验最新的Longhorn应用模型,并演示一些基本的例子
advertisement
热点推荐
· 天极网软件频道改版调查
· 10.28软件精选 找乐还是赌钱
· 中国游戏业——被人们忽视的黑暗
· Windows 2000密码破解不完全指南
· 解决XP SP2带来的网络故障(上)
[正文]

上一页  1 2 3 4  

  四、构建一个范例

  使用XAML语言,你可以快速高效地设计用户界面。我敢保证到Longhorn发布时,许多完全支持所见及所得的XAML开发工具会被更新或被开发出来,目前发布的预览版的Whidbey中已经包括了一部分这方面的扩展。下面让我们来构建一个范例程序。你将看到这和编写Windows窗体应用并没有太大的不同,而且你也将马上惊奇的发现你已掌握的.NET的技能可以很好的被应用在Longhorn上。这个程序的用户界面如图8所示,包括一个文本筐和一个上下文菜单。文本筐是用XAML定义的,而上下文菜单是动态创建的。


图八 Context Menu

  程序源码如下:

<Window
xmlns="http://schemas.microsoft.com/2003/xaml"
xmlns:def="Definition"
def:Class="Application2.Window1"
def:CodeBehind="Window1.xaml.cs"
Text="Application2" Visible="True">

<FlowPanel DockPanel.Dock="Fill">
<TextBox ID="input" Margin="10,10"
Background="LightCyan"
BorderBrush="black" FontFamily="verdana"
FontSize="16"
BorderThickness="1"
ContextMenuEvent="OnContextMenu"
Height="40" Width="360">Right-click to see a
context menu</TextBox>
</FlowPanel>
</Window>

// C# source file for the application

namespace MsdnLHSample
{
public partial class MyApp : Application
{
void AppStartingUp(object sender, StartingUpCancelEventArgs e)
{
Window mainWindow = new Window1();
mainWindow.Show();
}
}
}

// C# source file for the window

using System;
using MSAvalon.Windows;
using MSAvalon.Windows.Media;
using MSAvalon.Windows.Controls;
using MSAvalon.Windows.Documents;
using MSAvalon.Windows.Navigation;
using MSAvalon.Windows.Shapes;
using MSAvalon.Windows.Data;

namespace MsdnLHSample
{

// input is the textbox declared in the XAML

public partial class Window1 : Window
{
private void OnContextMenu(object sender, ContextMenuEventArgs e)
{
CreateMenu();
}

private void CreateMenu()
{
ContextMenu cm = new ContextMenu();
cm.FontFamily = "verdana";
cm.Background = Brushes.LightYellow;

MenuItem mi0 = new MenuItem();
mi0.Header = "Lower case";
mi0.FontSize = new FontSize(16);
mi0.Click += new ClickEventHandler(LowerCase);

cm.Items.Add(mi0);

MenuItem mi1 = new MenuItem();
mi1.FontSize = new FontSize(16);
mi1.Header = "Upper case";
mi1.Click += new ClickEventHandler(UpperCase);
cm.Items.Add(mi1);

MenuItem mi2 = new MenuItem();
mi2.Header = "Select All";
mi2.FontSize = new FontSize(16);
mi2.Click += new ClickEventHandler(SelectAll);
cm.Items.Add(mi2);


input.ContextMenu = cm;
}

public void LowerCase(Object sender, ClickEventArgs args)
{
MenuItem mi = (MenuItem) args.Source;
ContextMenu menu = (ContextMenu) mi.Parent;
TextBox thisTextBox = (TextBox) menu.PlacementTarget;

thisTextBox.Text = thisTextBox.Text.ToLower();
}

public void UpperCase(Object sender, ClickEventArgs args)
{
MenuItem mi = (MenuItem)args.Source;
ContextMenu menu = (ContextMenu)mi.Parent;
TextBox thisTextBox = (TextBox)menu.PlacementTarget;

thisTextBox.Text = thisTextBox.Text.ToUpper();
}

public void SelectAll(Object sender, ClickEventArgs args)
{
MenuItem mi = (MenuItem)args.Source;
ContextMenu menu = (ContextMenu)mi.Parent;
TextBox thisTextBox = (TextBox)menu.PlacementTarget;

thisTextBox.SelectAll();
}

}
}

  前面提到过Longhorn中所有的应用程序都是Application类的一个实例。这个对象是Longhorn应用模型的核心。但是Application对象只提供了一些基本的功能,一般只用于一些低级的、不需要导航功能的程序。实际上大部分Longhorn应用程序使用的是Application的一个子类--NavigationApplication,这个对象增加了对导航的支持。NavigationApplication支持大量的属性、方法和事件,这使你可以把一大堆的XAML Page组合到一个应用程序中。做一个这样的比较可能更清楚些:基于Application类的Longhorn应用程序类似于Win32中基于对话筐的程序。而基于NavigationApplication的,可导航的的Longhorn程序则相当于一个完整的Win32程序,它包括众多的窗体,一起完成程序的功能。下面是一个如何在Page中导航的例子:

myApp = NavigationApplication.Current;
win = (Navigation.NavigationWindow) myApp.Windows[0];
......
private void Button_Back(Object sender, ClickEventArgs e)
{
// If possible, go to the previous window
if(win.CanGoBack())
win.GoBack();
}

  可以通过Application(或NavigationApplication)的静态属性Current获得application对象的引用。前面的例子还演示了如何从堆栈中获取对第一个窗体的引用。在Button_Back事件中首先检查第一个窗体对象是否存在,如果存在就跳转过去。

  下面的例子演示了怎样通过继承NavigationApplication并覆盖其OnStartingUp方法来定制程序启动时的行为:

public class MyApp : NavigationApplication
{
NavigationWindow win;
......
protected override void OnStartingUp(StartingUpCancelEventArgs e)
{
win = new NavigationWindow();
// Add elements to the window
......
navWin.Show();
}
......
}

  让我们再回到图8的例子。根据我们刚刚的讨论,本例你既可以用Application作为基类,也可以用NavigationApplication,因为这只是一个单窗体的应用程序,我使用的是Application,程序中覆盖了Application的AppStartingUp方法,并且定义了几个事件处理器。AppStartingUp是进行系统初始化工作的理想地点。在AppStartingUp中我们创建了本例的主窗体,窗体中的文本筐在XAML中描述,文本筐被绑定到ContextMenuEvent事件,当用户在文本筐右击鼠标时触发该事件,创建一个上下文菜单对象(ContextMenu)。上下文菜单使用图形化设计器设计,通过选择背景色,前景色,边框,字体等等,你可以轻易的定制菜单(以及其他控件)的外观。这在Wind32编程中这种定制需要许多编程工作,而在.NET Framework中,托管代码封装了大部分的属性,用户可以控制的属性比较少。

  菜单项使用MenuItem类来创建,而将它们绑定到事件处理器的方法几乎是和.NET中一样的:

mia = new MenuItem[3];
for (int i=0; i<3; i++)
{
mia[i] = new MenuItem();
cm.Items.Add(mia[i]);
mia[i].Foreground = Brushes.Black;
}
mia[0].Header = "Lower Text";
mia[1].Header = "Upper case";
mia[2].Header = "Select all";
mia[0].Click += new ClickEventHandler(LowerCase);
mia[1].Click += new ClickEventHandler(UpperCase);
mia[2].Click += new ClickEventHandler(SelectAll);

  当一个菜单项被点击时,相应的事件处理器被执行,事件处理器的第一个参数被赋值为一个指向菜单项的引用:

public void LowerCase(Object sender, ClickEventArgs args)
{
MenuItem mi = (MenuItem) args.Source;
ContextMenu menu = (ContextMenu) mi.Parent;
TextBox thisTextBox = (TextBox) menu.PlacementTarget;
thisTextBox.Text = thisTextBox.Text.ToLower();
}

  为了获取TextBox对象,你必须从结构数中往上追溯。首先,获取MenuItem对象,然后是ContextMenu对象,最后获得ContextMenu的owner:TextBox,这时要修改TextBox对象的内容就轻而易举了。







上一页  1 2 3 4  

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 百万像素手机大展台
  • K7终极配置 时尚游戏的追求
  • 天极游戏专访锦天科技总经理贾可
  • 10.28软件精选 找乐还是赌钱
  • 浩鑫:争夺电子竞技“F1”桂冠
  • 体验诺顿安全特警2005版的最新特色
  • NGC《生化危机4》神秘男子出现
  • VIA作客天极 最新Roadmap曝光
  • Advertisement