托管WPF复合控件中奇怪的滚动条UI

时间:2011-05-03 13:52:41

标签: wpf winforms interop c++-cli avalonedit

我的Windows表单应用程序托管其中一个表单中的AvalonEdit(有问题的复合WPF控件),以满足其文本编辑要求。这是我使用的代码:

WPFHost = gcnew ElementHost();
TextField = gcnew AvalonEdit::TextEditor();
WPFHost->Dock = DockStyle::Fill;
WPFHost->Child = TextField;

TextField->Options->AllowScrollBelowDocument = false;
TextField->Options->EnableEmailHyperlinks = false;
TextField->Options->EnableHyperlinks = true;
TextField->Options->RequireControlModifierForHyperlinkClick = true;
TextField->ShowLineNumbers = true;

ContainerControl->Controls->Add(WPFHost); // the container is a panel

除了滚动条 - http://dl.dropbox.com/u/2584752/avalonEditBug.png之外,代码编译并执行正常。右键单击栏左边的内容会引发ArgumentOutOfRange异常。

奇怪的是,当我尝试在新创建的示例项目中托管控件时,我无法重现该问题。 '我正在使用文本编辑器的最新版本并安装了所有必需的程序集。

编辑:在用户控件中包装编辑器也无济于事。

4 个答案:

答案 0 :(得分:1)

你说控件在一个新的/空白的项目中运行正常但是在你需要的那个项目中失败让我对冲突的了解比什么都重要。在项目中,您真正想要的是与它所处理的项目相比有哪些区别? .NET版本?从一个目录中引用一个程序集但在另一个目录中引用GAC?

很难说当你在其他地方工作时控制器正在弄乱你,所以我唯一可以建议的是深入研究这两个项目的差异。

祝你好运。

答案 1 :(得分:0)

这对我来说看起来像布局错误。也许WPFHost会意外地测量TextField。

我可以建议在TextField本身上设置特定的宽度和高度。如果这可以解决问题,您可以根据WPFHost控件的大小更改或尝试设置MaxHeight / Width来调整这些问题,有时它们会帮助并保存一些代码以进行宽度/高度更新。

答案 2 :(得分:0)

尝试创建一个WPF网格作为ElementHost的子项,并将编辑器放在该网格中。在其他方面,是创建一个UserControl在该控件中有编辑器并使用Winform app中的控件。这种方法帮了我几次。

答案 3 :(得分:0)

我已针对此问题[Synchronizing a WPF ScrollViewer with a WinForms ScrollBar]中提到的问题实施了解决方法。