快捷搜索:

WPF 学习笔记 - 1. Application

和 WinForm 类似, WPF 同样必要一个 Application 来管辖一些全局的行径和操作,并且每个 Domain 中只能有一个 Application 实例存在。和 WinForm 不合的是 WPF Application 默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Delphi Form,将定义和行径代码相分离。当然,WebForm 也采纳了类似的要领。XAML 从严格意义上说并不是一个纯挚的 XML 款式文件,它更像是一种 DSL,它的所有定义都直接映射成某些代码,只不过详细的翻译事情由编译器完成而已。

下面是一个简单的 App 定义。

public partial class App : Application

{

}

当你在自动天生的 Project 代码中看到 paritial 时,应该下意识去找找 "This code was generated by a tool." …… 不过此次自动天生的代码寄放位置加倍古怪 —— objDebugApp.g.cs。

public partial class App : System.Windows.Application

{

[DebuggerNonUserCode]

public void InitializeComponent()

{

this.StartupUri = new System.Uri("Window1.xaml", System.UriKind.Relative);

}

[STAThread]

[DebuggerNonUserCode]

public static void Main()

{

App app = new App();

app.InitializeComponent();

app.Run();

}

}

App.StartupUri 用于设置 MainWindow,App.Run() 启动消息轮回。当然,还有那个 STAThread,这意味着 WPF 依旧应用一个 UI Thread 来处置惩罚 UI Message。

我们完全可以舍弃自动天生的代码,本武艺工写一个 App。

public class App : Application

{

[STAThread]

private static void Main()

{

var app = new App();

var window = new Window { Title = "WPF" };

app.Run(window);

}

}

Application 供给了一些实用的属性和措施。

Current: 获取 Domain 中默认的 Application 实例。

MainWindow: 获取主窗口实例。

Windows: 获取所有被实例化的 Window 实例。

ShutdownMode: 指定 Application.Shutdown 要领,包括主窗体关闭,着末一个窗口关闭,以及手工调用 Shutdown()。

Properties: 一个线程安然的全局字典,可用来存储一个公共信息。

Shutdown: 该措施终止 Application Process,可向操作系统返回一个退出码。

我们依然可以应用 Mutex 来阻拦运行多个实例。

private void Application_Startup(object sender, StartupEventArgs e)

{

var createdNew = false;

var name = Assembly.GetEntryAssembly().FullName;

new Mutex(true, name, out createdNew);

if (!createdNew)

{

MessageBox.Show("There is already an instance running, Exit!");

Application.Current.Shutdown();

}

}

当然也可以用 Windows 属性判断窗体是否已经存在。

private void button1_Click(object sender, RoutedEventArgs e)

{

var window2 = Application.Current.Windows.OfType().FirstOrDefault(w => w is Window2);

if (window2 == null) window2 = new Window2();

window2.Show();

window2.Activate();

}

您可能还会对下面的文章感兴趣: