在WPF中实例化Windows窗体控件而不使用默认构造函数

时间:2009-12-16 17:24:43

标签: c# wpf winforms custom-controls windowsformshost

我正在尝试在WPF中托管自定义Windows窗体控件。我的自定义控件没有公共构造函数,它有一个静态Create()方法,如下所示:

public abstract class MyCustomControl : UserControl
{
  internal MyCustomControl(...) {  }

  public static MyCustomControl Create(SomeEnum kind)
  {
    switch (kind)
    {
      case SomeEnum.Kind1:
        return new MySuperCustomControl(...);
      ...
    }

我想要做的是在WPF中实例化此自定义控件,然后将其托管在WindowsFormsHost中,但我显然无法添加抽象类:

 <wfi:WindowsFormsHost Width="250" Height="150">
  <my:MyCustomControl x:Name="customControl" />  <-- doesn't work
</wfi:WindowsFormsHost>

有没有办法可以通过代码将它添加到“主机”中?

2 个答案:

答案 0 :(得分:1)

找到它,它是WindowsFormsHost.Child属性。

答案 1 :(得分:1)

如果没有XAML中的公共构造函数,则无法托管控件。 你可以尝试两种方式:

  1. 为您定义名称 WindowsFormsHost并设置Child WindowsFormsHost的属性 来自C#中的静态Create()的实例 码。例如在初始化(或 load)方法。 - 这很简单。
  2. 尝试将WindowsFormsHost的Child属性绑定到Create()方法。 坦率地说,我不知道或者这个 方法将是有效的...但你可以 试试:) ..如何绑定到XAML中的方法? 你可以阅读 - this或尝试 看看msdn或谷歌:)