WPF4 事件处理器与代码后置

当一个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"/>

 

posted @ 2020-05-29 15:13  NicolasLiaoRan  阅读(276)  评论(0编辑  收藏  举报