나는 wpf Usercontrol을 가지고 있는데, 안에는 Winforms pdfviewer를 사용하여 pdf 파일을 표시하고 있습니다. 또한 나는 문서 세부 사항을 입력하는 Textboxes 몇 있습니다. 마지막으로이 사용자 컨트롤을 표시하는 팝업. 문제는 텍스트 상자에 뭔가를 입력하려고 할 때 ntn이 일어나고 있다는 것입니다. 텍스트 상자를 마우스 오른쪽 버튼으로 클릭하면 잘라 내기, 복사 및 붙여 넣기 옵션이있는 컨텍스트 메뉴가 표시됩니다. 인터넷 검색 후, Forms.Integration.WindowsFormsHost.EnableWindowsFormsInterop(),로드 된 이벤트에이 줄을 넣었지만 작동하지 않습니다. 어느 누구도 비슷한 문제에 직면하고 해결책을 찾을 수 없습니다. 감사합니다. . 레이WindowsFormsHost Winform pdfviewer 제어 문제
0
A
답변
1
나는이 문제를 잠시 도망 쳤다. WPF 메시지 루프가 WinForms 메시지 루프와 잘 어울리지 않는 버그와 관련이 있습니다.
내가 사용한 솔루션은 WPF 창에서 WinForms 양식으로 가장 바깥 쪽 레이어를 변경하는 것이 었습니다. 즉,이 같은 클래스를 사용하여
new ElementHostForm(CreateContent(), title).Show();
와
new Window { Content = CreateContent(), Title = title }.Show();
대체 :
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);
}
}
이것은 윈폼은 가장 바깥 쪽 메시지 루프를 할 수 있도록하여 버그를 해결했습니다.
나는 이미 내 최상위 콘텐츠가 별도의 UserControl (창이 아님)에 있었기 때문에이 변경 작업은 매우 간편했습니다. 최상위 콘텐츠가 Window 인 경우 리팩터링해야 할 수 있습니다.