当一个XAML标签对应一个对象时,这个标签的一部分Attribute会对应这个对象的Property。除了这部分对应着对象Property的Attribute外,还有一部分Attribute对应着这个对象的事件Event。<Button>标签有一个名为Click的Attribute,就对应Button类的Click事件。
一、WPF支持在XAML里为对象的事件指定事件处理器,写法为:
<ClassName EventName="EventHandlerName">,VS会自动补全这个事件。
<Button Name="btnChild" Click="btnChild_Click">ShowChild</Button> ... private void btnChild_Click(object sender, RoutedEventArgs e) { Human h = (Human)this.FindResource("human"); MessageBox.Show(h.Name); }
事件处理器的函数声明与用于声明Button.Click事件的委托报纸类型和参数上一致
<Button Name="btnChild" Click="btnChild_Click">ShowChild</Button>实际上等价于
Button btnChild=new Button();
btnChild.Click+=new RoutedEventHandler(btnChild_Click);
xaml.cs也被称为代码后置。所有用于实现程序逻辑的代码都需要放在后置的C#文件中。
二、某些时候,会可能把xaml.cs中的代码放置xaml文件中,通过x:Code和<![CDATA[...]]>转义标签实现。例如:
<Button Name="btnXcode" Click="btnXcode_Click">Xcode</Button> <x:Code> <![CDATA[ private void btnXcode_Click(object sender, RoutedEventArgs e) { MessageBox.Show("xCode with CDATA"); } ]]> </x:Code>
三、导入程序集和引用其中的命名空间
每个解决方案都会包含若干个项目,每个项目都可以独立编译,编译结果就是一个程序集(Assembly),而一个解决方案就是一个完整的程序。常见的程序集是以.exe为扩展名的可执行程序或.dll为扩展名的动态链接库。一般引用其他程序集,都是去引用的dll,所以也一般称引用程序集为引用类库。类库中的类一般放置在合适的命名空间中,以避免同名类的冲突。比如LibA.dll下的ClassA和LibB.dll下的ClassA,如果LibA.dll中的ClassA在MS命名空间,另一个在Google命名空间,就可以MS.ClassA和Google.ClassA来区分引用。
如何在xaml中引用命名空间?
语法是:
xmlns:映射名="clr-namespace:类库中命名空间的名字;assembly=类库文件名"
比如一个类库是MyLib.dll,其中包含namespaceA和namespaceB两个命名空间,而且也被引入到了WPF项目中,那么引用语法就是:
xmlns:myspace1="clr-namespace:namespaceA;assembly=MyLib" xmlns:myspace2="clr-namespace:namespaceB;assembly=MyLib"
具体来说:
xmlns是用于在XAML中声明命名空间的Attribute,是xml命名空间的简写
冒号后的映射名可选,但因为不加映射名的默认命名空间已经被WPF主要命名空间占用,所以所引用的命名空间都需要加上这个映射名。一般是跟随团队或命名空间简写或原名。
引号后的字符串会由xaml编辑器自动填充。
当使用了引用的命名空间后,就可以使用其中的类,用法是:
<myspace1:MessagePanel x:Name="Windows1"/>