WPF运行之后,App.xaml是应用的声明起始点。
一、指定入口
通过指定Application 的StartupUri属性,指示了启动应用的时候,加载哪个窗口或网页。
最常见的就是将默认的MainWindow.xaml修改为Login.xaml
也可通过Application_Startup来实现,这种方式可提前指定标题等属性。
App.xaml最常使用的特性是定义全局资源,它们可能会在整个应用里面被使用或者访问,如全局样式。
ResourceDictionary
作用:一个应用程序中,某个窗口需要使用样式,但是样式非常多,写在一个窗口中代码分类不方便。最好Style写在专门的xaml文件中,然后引用到窗口中,就像HTML引用外部css文件一样。
初衷:就在于可以实现多个项目之间的共享资源,资源字典只是一个简单的XAML文档,该文档除了存储希望使用的资源之外,不做任何其它的事情。
代码查看Demo的WpfApp1.WpfApp2
ResourceDictionary.MergedDictionaries 属性
获取构成在合并字典的各种资源字典 ResourceDictionary 字典的集合,作为静态资源直接调用
例如自定义图标,这样我可以在系统中随意使用定义的图标了
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/resources/Icons.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Page.Resources>
总结:
使用资源字典的主要原因有两个:
a. 提供皮肤功能。
b. 存储需要被本地话的内容(错误消息字符串等,实现软编码)
二、初始化
通过App()构造函数,实现日志等组件的初始化
三、WPF 动态更改启动窗体startupUri
第一步: 在 App.xaml 里,把 StartupUri=""去掉,改成 Startup="Application_Startup"
第二步: 在 App.xaml.cs里,增加 Application_Startup 事件:
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
Application currApp = Application.Current;
string ctsq = Common.pdct();
if (ctsq == "1")
currApp.StartupUri = new Uri("LoginWindow.xaml", UriKind.RelativeOrAbsolute);
else
currApp.StartupUri = new Uri("ZLogni.xaml", UriKind.RelativeOrAbsolute);
}
}