我有一个wpf Usercontrol,我正在使用Winforms pdfviewer来显示pdf文件。此外,我有几个文本框输入文档详细信息。最后,显示此用户控件的弹出窗口。 问题是,当我尝试在文本框中键入内容时,ntn正在发生。当我右键单击文本框时,我可以看到带有剪切,复制和粘贴选项的上下文菜单。谷歌搜索后,我发现类似下面,Forms.Integration.WindowsFormsHost.EnableWindowsFormsInterop(),我把这一行放在加载事件,但这不起作用。任何人都可以遇到simillar问题,并有任何解决方案。 谢谢。 雷伊
答案 0 :(得分:1)
我曾经遇到过这个问题。我记得这是一个与顶级WPF消息循环有关的错误,与WinForms消息循环不一致。
我使用的解决方案是将最外层从WPF窗口更改为WinForms窗体。换句话说,我换了
new Window { Content = CreateContent(), Title = title }.Show();
与
new ElementHostForm(CreateContent(), 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);
}
}
通过允许WinForms拥有最外层的消息循环,这解决了这个问题。
这个更改对我来说非常简单,因为我已经将我的顶级内容放在一个单独的UserControl(不是Window)中。如果您的顶级内容是Window,则可能需要重构。