Pergunta

Eu tenho um WPF UserControl, por dentro estou usando um WinForms PDFViewer para exibir arquivos PDF. Também tenho algumas caixas de texto para inserir detalhes do documento. Finalmente, um pop -up que exibe esse controle do usuário. O problema é que, quando tento digitar algo nas caixas de texto, o NTN está acontecendo. Quando clico com o botão direito do mouse em uma caixa de texto, posso ver o menu de contexto com opções de corte, copiar e colar. Depois de pesquisar no Google, encontrei algo abaixo, form.integation.windowsformshost.enablewindowsformSinterop (), coloquei essa linha no evento carregado, mas isso não está funcionando. Qualquer um pode enfrentar o problema do Simillar e ter quaisquer soluções. Obrigado. Rey

Foi útil?

Solução

Eu encontrei esse problema há um tempo. Pelo que me lembro, um bug tem a ver com o loop de mensagens WPF de nível superior, não jogando bem com o loop de mensagem WinForms.

A solução que usei foi alterar minha camada mais externa de uma janela WPF para um formulário WinForms. Em outras palavras, eu substituí

new Window { Content = CreateContent(), Title = title }.Show();

com

new ElementHostForm(CreateContent(), title).Show();

Usando uma aula como esta:

class ElementHostForm : System.Windows.Forms.Form
{
  ElementHost _host;

  public WinFormsWindow(UIElement content, string title)
  {
    _host = new ElementHost { Child = content };
    Controls.Add(host);

    content.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
    if(content.DesiredSize.Width > 100 && content.DesiredSize.Height > 100)
      ClientSize = _host.Size =
        new Size((int)content.DesiredSize.Width, (int)content.DesiredSize.Height));

    content.ClearValue(FrameworkElement.WidthProperty);
    content.ClearValue(FrameworkElement.HeightProperty);

    Title = title;
  }

  protected override void OnResize(EventArgs e)
  {
    if(!ClientSize.IsEmpty) _host.Size = ClientSize;
    base.OnResize(e);
  }
}

Isso funcionou em torno do bug, permitindo que o WinForms tenha o loop de mensagem mais externo.

Essa mudança foi muito fácil para mim, porque eu já tinha meu conteúdo de nível superior em um UserControl separado (não uma janela). Se o seu conteúdo de nível superior for uma janela, talvez seja necessário refatorar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top