对于普通的wpf控件来说,需要实现在Winform页面上引用,可以在创建好wpf的Usercontrol后,在工具箱里直接拖出来,它会生成一个ElementHost控件并完成对usercontrol的绑定,但是这种是容易出错的,我一般会在代码中对它进行赋值,代码如下:

8ec3b5593ad44f4a809456a163dd4254.png

            UserControl1 userControl1 = new UserControl1("测试");
            elementHost1.Child = userControl1;
            this.elementHost1.Parent = this.gridControl1;

 但是对于带资源的usercontrol你会发现问题,加载不出来等等问题,这时候就需要用到另一种方式。可以在全局的 Application 对象中动态增加资源的方法解决。

  1. 由于WinForm 默认不含 Application 全局变量,需手动引入。
  2. using System.Windows
            public Form1()
            {
                if (null == System.Windows.Application.Current)
                {
                    new System.Windows.Application();
                }
                InitializeComponent();
            }

     

  3. 在自定义的 UserControl 子类的构造函数 InitializeComponent 执行之前动态增加所需要的资源
  4. using System.Collections.ObjectModel;
            public UserControl1(string txt)
            {
                System.Uri resourceLocater = new System.Uri("", System.UriKind.Relative);
                ResourceDictionary rd = (ResourceDictionary)Application.LoadComponent(resourceLocater);
                Application.Current.Resources.MergedDictionaries.Add(rd);
                System.Uri resourceLocater1 = new System.Uri("", System.UriKind.Relative);
                ResourceDictionary rd1 = (ResourceDictionary)Application.LoadComponent(resourceLocater1);
                Application.Current.Resources.MergedDictionaries.Add(rd1);
                InitializeComponent();
                this.textaa.Text = txt;
            }

    利用这种方式可以正确的加载资源并使用,这边还有优化的空间,但效果已经实现了,并不是太复杂。通过以上两步就可以实现Winform中使用WPF控件(带资源的)。

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐