• 用 XAML 描述 WinForm 界面


    自从 WPF 推出以后,很多用 .NET 的童鞋以为 XAML 是 WPF 专用的界面描述语言。其实不然,XAML 是一种专门用于“对象图实例化并设置初始值”的 XML 方言,跟 C# 之类全功能的语言不同,XAML 专攻对象的创建和属性设置,而并不能执行方法或者做条件判断。XAML 的内容跟你把一个普通的 CLR 对象及其关联的子对象序列化成一个 XML 并没有什么本质上的不同,只不过 XAML 发明了些方便的语法表述起来更简洁而已。

    其实,在 .NET 框架里早就有一个 XAML 脱离 WPF 的例子了,Windows Workflow Fundation 框架所采用的工作流定义默认就是用的 XAML 文件格式。很自然地,我想到了用 XAML 来定义 WinForm,结果还真试成了,下面就是折腾步骤:

    用 Visual Studio 2010 建一个 .NET4 的 WinForm 应用程序项目并命名为“PlayXaml”,这里指定 .NET4 是因为我们要用到 .NET4 才有的 System.Xaml.dll。项目建好之后记得添加 System.Xaml 的引用。

    为 Form1 添加一个按钮,并在按钮事件里写:

    var form = System.Xaml.XamlServices.Load("form.xaml") as Form;
    form.Show();

    接下来为项目添加一个名为 form.xaml  的 XML 格式文件,在文件属性里设置“复制到输出目录:总是”,构建动作改成“内容”。form.xaml 文件内容如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <swf:Form ClientSize="568, 379" Location="50, 50" Name="Form1" Text="Form From XAML!" 
              xmlns="clr-namespace:PlayXaml;assembly=PlayXaml" 
              xmlns:swf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
        <swf:Form.Controls>
            <swf:Button Location="370, 212" Name="button1" TabIndex="0" Text="Click Me!" 
                 UseVisualStyleBackColor="True" />
        </swf:Form.Controls>
    </swf:Form>

    上面的代码用 XAML 定义了一个包含按钮的表单,看起来跟 WPF 的定义差不多吧?

    最后一步,运行程序,单击按钮,就可以看见 XAML 定义的表单弹出来了。对于 XAML 我的想法是,如果我们用相同的类型和属性包装一组控件,比如 Silveright 的 MyButton,WinForm 的 MyButton 和 ASP.NET WebForm 的 MyButton,那么只需要修改 XAML 里的 XML Namespace 就可以实现同一个 UI 布局用于不同的平台,嗯,很有趣的想法。

    Have fun!

  • 相关阅读:
    LINQ标准查询操作符(二)——Join、GroupJoin、GroupBy、Concat、
    LINQ标准查询操作符(一)——select、SelectMany、Where、OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse
    LINQ GroupBy
    C# EF使用SqlQuery直接操作SQL查询语句或者存储过程
    mycat工作原理
    Linux系统启动过程详解
    jump堡垒机配置使用
    jumpserver 堡垒机环境搭建(图文详解)
    pip安装
    判断网站响应时间 脚本
  • 原文地址:https://www.cnblogs.com/oldrev/p/2310618.html
Copyright © 2020-2023  润新知