• 在WinForm应用程序中嵌入WPF控件


    我们知道,在WPF界面上添加WinForm的控件需要使用WindowsFormHost类。而在WinForm界面上添加WPF控件该如何做呢?有没有类似的类呢?明显是有的,ElementHost就是为了在WinForm应用程序中嵌入WPF元素而定义的。它继承自System.Windows.Forms.Control,是一个WinForm控件,但它知道如何显示WPF内容。

     

    接下来演示如何使用ElementHost来显示一个WPF控件——Button,并与WinFormButton的显示作个简单的对比(xp环境)。

     

    1.  创建一个标准的WinForm工程,从工具栏中找到“WPF Interoperability”项目,选择其中的ElementHost,将其拖拽到Form中,如图1所示:

     

    2.  简单的调整一下ElementHost的大小,因为默认情况下,WPF控件会占据所有给予ElementHost的空间。此外,我们查看一下工程的References,可以看到,拖拽ElementHost后,会自动添加必要的WPF程序集(PresentationFrameworkPresentationCoreWindowBase等)。

     

    3.  接下来我们拖拽一个WinForm ButtonForm中,修改Button的内容为“Button in Winform”,如图2所示:

     

     

    2 添加Winform Button

     

    4.  WPF控件只能在后台代码中添加到ElementHost中,我们在窗体的构造函数中创建WPF控件,如下面的代码片段所示:

     

        public partial class Form1 : Form

        {

            public Form1()

            {

                InitializeComponent();

     

                // Create a WPF Button

                System.Windows.Controls.Button btn = new System.Windows.Controls.Button();

                btn.Content = "Button in WPF";

     

                // Add it to ElementHost

                elementHost.Child = btn;

            }

        }

     

    ElementHostChild属性为UIElement类型,因此,它可以被设置成任何UIElement对象。

     

    5.  按下F5,运行Winform应用程序,WPFButton控件和WinformButton控件显示如图3所示。可以看出,两个Button的默认字体明显不同。

     

     

  • 相关阅读:
    Please check logcat output for more details
    如何移植freertos
    依赖: nginx-common (= 1.14.0-0ubuntu1) 但是它将不会被安装
    错误:22 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu bionic Release 404 Not Found [IP: 91.189.95.83 80]
    由于没有公钥,无法验证下列签名:
    jQuery的TAB切换+定时器
    CSS问题1:div中 li宽度不固定 ie6和ie7不兼容不自动换行
    (转)Sqlite中INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用
    (转)JS加载顺序
    (转)在网页中JS函数自动执行常用三种方法
  • 原文地址:https://www.cnblogs.com/xiaowei0705/p/2044474.html
Copyright © 2020-2023  润新知