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

UserControl1 userControl1 = new UserControl1("测试");
elementHost1.Child = userControl1;
this.elementHost1.Parent = this.gridControl1;
但是对于带资源的usercontrol你会发现问题,加载不出来等等问题,这时候就需要用到另一种方式。可以在全局的 Application 对象中动态增加资源的方法解决。
- 由于WinForm 默认不含 Application 全局变量,需手动引入。
- using System.Windows
public Form1() { if (null == System.Windows.Application.Current) { new System.Windows.Application(); } InitializeComponent(); } - 在自定义的 UserControl 子类的构造函数
InitializeComponent执行之前动态增加所需要的资源 - 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控件(带资源的)。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)