zoukankan      html  css  js  c++  java
  • 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"/>
  • 相关阅读:
    使用nginx部署Yii 2.0yii-advanced-app-2.0.6
    yii-basic-app-2.0.5/basic/config/web.php
    PS显示图像大小快捷键
    说说c, c++ 和 go
    十分钟搭建自己的私有NuGet服务器-BaGet(转)
    Redis面试总结&史上最全Redis面试题及答案(转)
    Kubernetes之helm部署使用(转)
    Kubernetes RBAC 详解(转)
    Kubernetes 集群安全机制详解(转)
    Repository 返回 IQueryable?还是 IEnumerable?(转)
  • 原文地址:https://www.cnblogs.com/NicolasLiaoran/p/12987578.html
Copyright © 2011-2022 走看看