今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系。比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架:

Windows Forms

先看看Window Forms中的情况,下图为在VS中创建的默认Windows Forms项目结构:

 关于 WP 开发中.xaml 与.xaml.cs 的关系

分别回顾一下每个文件以及它们之间的关系:

┣━ Properties------------------------------------------- 项目属性文件夹

┣━━━━━ AssemblyInfo.cs----------------------------------- 程序集信息声明

┣━ App.config------------------------------------------- 应用程序配置文件

┣━ Form1.cs--------------------------------------------- 窗体Form1 类文件

┣━━━━━ Form1.Designer.cs--------------------------------- 窗体Form1设计 类文件

┗━ Program.cs------------------------------------------- 程序入口类文件

 

这里我们主要关心的就是Form1.csForm1.Designer.csProgram.cs三个文件,下面我用Visio图表示一下执行流程

 

关于 WP 开发中.xaml 与.xaml.cs 的关系

 

也就是说,Form1.csForm1.Designer.cs最终在编译阶段形成了一个类型,所有的控件的定义和初始化(大多是由于开发者的拖拽和属性编辑操作产生)全部在Form1.Designer.cs这个部分类中完成,代码我就不用贴出来了。我们在开发的时候只需要关心如何在Form1.cs文件中操作部分类中定义的控件成员和编写一些逻辑代码,从而减少开发者的编码量。

 

说白了,也就是大家常说的前台UIForm1.Designer.cs)和后台代码(Form1.cs)是部分类的关系,通过partial关键字实现。

 

Web Forms

再来看看Web Form中又是怎样的一种形式:

关于 WP 开发中.xaml 与.xaml.cs 的关系

这里我们主要是看看WebForm1.aspxWebForm1.aspx.csWebForm1.aspx.designer.cs这三个文件的关系:

我们都应该知道WebForm1.aspx文件最终也是编译成为一个类存放于一个临时的程序集,对于这个类型来讲,它派生自WebForm1.aspx.cs文件中定义的类,也就是说前台UIWebForm1.aspx)是后台代码(WebForm1.aspx.cs)的子类。那么WebForm1.aspx.designer.cs又是个啥?这里就和WinForms一样了,它和WebForm1.aspx.cs最终也是编译成为一个类型,在WebForm1.aspx.designer.cs也都是定义了一些控件,这也是当年号称很厉害的CodeBehind,目的是将表现和逻辑隔离,当然我们这里不需要评价CodeBehind,本身也不在今天讨论的范畴之中。

 

Window Phone / WPF

最后来看看WP中怎么设计的:

 关于 WP 开发中.xaml 与.xaml.cs 的关系

以上是Visual Studio 2013 Update 4中创建的空白Windows Phone 8.1应用,其中有一个MainPage.xamlMainPage.xaml.cs文件,那它两又是什么关系呢?难道是和Windows Forms又或是Web Forms一样吗?

答案自然是否定的,首先XAML文件中写的XAML代码实际上就是XML语法,官方的说法:它是一个声明对象的语言,为我们创建对象提供便捷的一种方式。与HTML类似,特点是用来描述用户接口UI)内容

通常我们把与xaml文件关联的xaml.cs文件叫作代码隐藏文件。如果你引用xaml中的任何一个事件处理程序(通过事件特性,如Button的Click事件),这里就是我们定义这些事件处理程序的地方。

我们先看看后台代码

 1 namespace Demo1
 2 {
 3     /// <summary>
 4     /// 可用于自身或导航至 Frame 内部的空白页。
 5     /// </summary>
 6     public sealed partial class MainPage : Page
 7     {
 8         public MainPage()
 9         {
10             this.InitializeComponent();
11 
12             this.NavigationCacheMode = NavigationCacheMode.Required;
13         }
14 
15         /// <summary>
16         /// 在此页将要在 Frame 中显示时进行调用。
17         /// </summary>
18         /// <param name="e">描述如何访问此页的事件数据。
19         /// 此参数通常用于配置页。</param>
20         protected override void OnNavigatedTo(NavigationEventArgs e)
21         {
22             // TODO: 准备此处显示的页面。
23 
24             // TODO: 如果您的应用程序包含多个页面,请确保
25             // 通过注册以下事件来处理硬件“后退”按钮:
26             // Windows.Phone.UI.Input.HardwareButtons.BackPressed 事件。
27             // 如果使用由某些模板提供的 NavigationHelper,
28             // 则系统会为您处理该事件。
29         }
30 
31         private void btnHello_Click(object sender, RoutedEventArgs e)
32         {
33             txtResult.Text = "Hello World";
34             var temp = (TextBlock)base.FindName("txtResult");
35             temp.Text = "Hello World2";
36         }
37     }
38 }
MainPage.cs

相关文章:

  • 2021-07-02
  • 2021-11-19
  • 2022-12-23
  • 2022-03-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-31
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-07-14
  • 2022-12-23
  • 2021-12-30
  • 2022-01-30
  • 2022-12-23
相关资源
相似解决方案