Instanciar um controle do Windows Forms no WPF sem construtor padrão
-
20-09-2019 - |
Pergunta
Estou tentando hospedar um controle de formulários Windows personalizado no WPF. Meu controle personalizado não tem um construtor público e tem uma estática Create()
Método que se parece com o seguinte:
public abstract class MyCustomControl : UserControl
{
internal MyCustomControl(...) { }
public static MyCustomControl Create(SomeEnum kind)
{
switch (kind)
{
case SomeEnum.Kind1:
return new MySuperCustomControl(...);
...
}
O que eu quero fazer é instanciar esse controle personalizado no WPF e depois o hospedar em WindowsFormsHost
, mas obviamente não consigo adicionar uma classe abstrata:
<wfi:WindowsFormsHost Width="250" Height="150">
<my:MyCustomControl x:Name="customControl" /> <-- doesn't work
</wfi:WindowsFormsHost>
Existe uma maneira de adicioná -lo ao "host" via código?
Solução
Você não pode hospedar o controle sem construtor público em Xaml. Você pode tentar de duas maneiras:
- Defina o nome para o seu WindowsFormShost e defina a propriedade infantil do WindowsFormShost como sua instância do estático CREATE () no código C#. Por exemplo, no método Initialize (ou Load). - É uma maneira simples.
- Tente vincular a propriedade infantil do método WindowsFormShost para criar (). Francamente, eu não sei ou essa abordagem será trabalho ... mas você pode tentar :) .. quão vinculativo ao método em xaml? você pode ler - isto Ou tente procurar no MSDN ou Google :)
Outras dicas
Encontrou, é o WindowsFormsHost.Child
propriedade.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow