【问题标题】:Adding User Control (WPF) to Panel in Windows Form c#在 Windows 窗体 c# 中将用户控件 (WPF) 添加到面板
【发布时间】:2016-08-15 09:44:10
【问题描述】:

我正在制作 Outlook 插件,当用户启动插件时,会出现一个 Windows 窗体。在这个 windows 窗体中,我将根据用户输入动态添加用户控件。

我遇到的问题是以编程方式添加控件。如果我只添加一个标准 TextBox 一切正常,但是当我添加用户控件时,我得到以下异常;

'System.Windows.Forms.Control.ControlCollection.Add(System.Windows.Forms.Control)' 的最佳重载方法匹配有一些无效参数

无法从“OutlookAddIn.Controls.RForm”转换为“System.Windows.Forms.Control”

我尝试将控件强制转换为 UserControl,但出现了新的异常。

主窗体:

using System.Windows.Forms;

namespace OutlookAddIn
{
    public partial class Main : Form
    {
        public Main()
        {
            InitializeComponent();
        }

        private void lblReactiveMaintenance_Click(object sender, EventArgs e)
        {
            OutlookAddIn.Controls.RForm reactiveMaintForm = new OutlookAddIn.Controls.RForm();
            reactiveMaintForm.Name = "rForm";
            pnlMain.Controls.Add(reactiveMaintForm);
        }
    }
}

用户控制:

namespace OutlookAddIn.Controls
{
    /// <summary>
    /// Interaction logic for RForm.xaml
    /// </summary>
    public partial class RForm : UserControl
    {
        public RForm()
        {
            InitializeComponent();
        }
    }
}

【问题讨论】:

标签: c# wpf winforms outlook


【解决方案1】:

您应该能够使用 ElementHost 控件来包装 WPF 控件。见https://msdn.microsoft.com/en-us/library/system.windows.forms.integration.elementhost(v=vs.110).aspx

private void lblReactiveMaintenance_Click(object sender, EventArgs e)
{
    OutlookAddIn.Controls.RForm = new OutlookAddIn.Controls.RForm();
    reactiveMaintForm.Name = "rForm";
    elementHost2.Child = reactiveMaintForm;
}

【讨论】:

  • 是的,我确实尝试过使用元素宿主,但我不确定是否必须在设计器中配置托管内容,或者是否可以放入元素宿主控件并实用地配置它.我试过上面cmets中提到的网址,但文章似乎已被删除。您是否有关于如何以编程方式配置元素主机的托管内容的示例或 URL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多