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

发布于 2024-08-15 06:09:10 字数 774 浏览 5 评论 0原文

我正在尝试在 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,但我显然可以' t 添加抽象类:

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

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

I am trying to host a custom Windows Forms control in WPF. My custom control does not have a public constructor, and it has a static Create() method which looks something like this:

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

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

What I want to do is instantiate this custom control in WPF and then have it hosted in WindowsFormsHost, but I obviously can't add an abstract class:

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

Is there a way I could add it into the "Host" via code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

等风也等你 2024-08-22 06:09:10

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

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

You can't host control without public constructor in XAML.
You can try two way:

  1. define name for your
    WindowsFormsHost and set Child
    property of WindowsFormsHost to your
    instance from static Create() in C#
    code. for example in initialize (or
    load) method. - it is simple way.
  2. try to bind Child property of WindowsFormsHost to Create() method.
    Frankly, I don't know or this
    approach will be work... but you can
    try :).. how bind to method in XAML?
    you can read - this or try to
    look in msdn or google :)
巡山小妖精 2024-08-22 06:09:10

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

Found it, it's the WindowsFormsHost.Child property.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文