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"/>
  • 相关阅读:
    python_day11 mysql
    python_day10 多线程 协程 IO模型
    python_day09 多进程 多线程 协程 paramiko模块
    python_day08 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程
    python_day07 常用模块xml/configparser/hashlib/subprocess 面向对象程序设计
    python_day06 匿名函数与内置函数 常用模块
    python_day05 协程函数 面向过程编程 递归和二分法 模块和包的使用 常用模块 开发代码规范
    python_day04 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式
    python_day03 文件处理复习和函数定义调用参数对象
    python_day02 基本数据类型操作,字符编码,文件处理
  • 原文地址:https://www.cnblogs.com/NicolasLiaoran/p/12987578.html
Copyright © 2011-2022 走看看