WPF程序设计指南: The Application and the Window
1. 最简单的WPF程序: A console application project: say hello.
需要引用的DLL: PresentationCore, PresentationFramework, System, WindowBase
代码
using System;
using System.Windows;
namespace Petzold.SayHello
{
class SayHello
{
[STAThread]
public static void Main()
{
Window win = new Window();
win.Title = "Say Hello";
win.Show();
Application app = new Application();
app.Run();
}
}
}
注:
- 可在Project ->Properties菜单中设置OutPut Type为“console Application” 或者 “Window Application”
- 一个程序只能创建一个Application对象,对于程序其他地方来说,此application对象的作用就如同固定的锚一般。
- Run方法必须保留到最后,Run方法一旦被调用,就不会返回,直到窗口关闭为止。
- 只有在调用了Run之后,window对象才能响应用户的输入。
2. 使用简单事件处理器
代码
using System;
using System.Windows;
using System.Windows.Input;
namespace Petzold.HandleAnEvent
{
class HandleAnEvent
{
[STAThread]
public static void Main()
{
Application app = new Application();
Window win = new Window();
win.Title = "Handle An Event";
win.MouseDown += WindowOnMouseDown;
app.Run(win);
}
static void WindowOnMouseDown(object sender, MouseButtonEventArgs args)
{
Window win = sender as Window;
string strMessage =
string.Format("Window clicked with {0} button at point ({1})",
args.ChangedButton, args.GetPosition(win));
MessageBox.Show(strMessage, win.Title);
}
}
}
注:
- MouseDown事件所需要的实践处理器,必须符合MouseButtonEventHandler委托:第一个参数类型是object, 第二个参数类型是MouseButtonEventArgs
- object sender: 消息来源 MouseButtonEventArgs args:事件相关参数
- 获取主窗口的办法:Window win=Application.Current.MainWindow
3. 使用Appliaction 类的事件和方法
Application类定义了很多有用的事件,大多数事件都有对应的protected方法,可以用来发出事件。
如果你的程序需要Application类的某些事件,你可以为这些事件安装事件处理器,另一个更为方便的方法,就是定义一个类,继承Application.
- Application所定义的Startup事件是利用protected OnStartup方法来产生的。一旦调用Appliction对象的Run方法,Onstartup方法会被马上调用
- 当Run即将返回时,会调用OnExit方法,并发出对应的Exit事件。
- OnSessionEnding方法和SessionEndin事件表示用户已经选择要注销Windows操作系统,或者要关闭电脑。
继承Application类,以利用其方法
using System;
using System.Windows;
using System.Windows.Input;
namespace Petzold.InheritTheApp
{
class InheritTheApp : Application
{
[STAThread]
public static void Main()
{
InheritTheApp app = new InheritTheApp();
app.Run();
}
protected override void OnStartup(StartupEventArgs args)
{
base.OnStartup(args);
Window win = new Window();
win.Title = "Inherit the App";
win.Show();
}
protected override void OnSessionEnding(SessionEndingCancelEventArgs args)
{
base.OnSessionEnding(args);
MessageBoxResult result =
MessageBox.Show("Do you want to save your data?",
MainWindow.Title, MessageBoxButton.YesNoCancel,
MessageBoxImage.Question, MessageBoxResult.Yes);
args.Cancel = (result == MessageBoxResult.Cancel);
}
}
}
4. Window 和 Application 类的一些properties
Application:
- MainWindow: Application的主窗口,默认为第一个被创建的窗口
- 指定主窗口:MainWindow=win;
- ShutdownMode: Application的结束模式。
- Windows,Application所包含的所有窗口。
Window:
- ShowInTask: Window是否在任务栏中显示。
- owner: Window的拥有者(也是Window),“被拥有者”一定出现在“拥有者”前面,“拥有者”关闭或者最小化,“被拥有者”也会关闭或者消失。