2

我的 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 异常。

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

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

4

4 回答 4

1

您说该控件在新/空白项目中运行良好,但在您需要的项目中失败,这让我更想知道冲突。在你真正想要的项目中与它工作的项目相比有什么不同?.NET 版本?从一个目录中引用程序集,但在另一个目录中引用 GAC 之外的程序集?

当你让它在别处工作时,很难说控制对你来说是一团糟,所以我唯一能建议的就是深入研究这两个项目的差异。

祝你好运。

于 2011-05-09T20:05:06.397 回答
0

这对我来说似乎是一个布局错误。也许 WPFHost 意外测量了 TextField。

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

于 2011-05-05T17:33:57.597 回答
0

尝试创建一个 WPF 网格作为 ElementHost 的子级,并将编辑器放置在该网格内。另一种方法是创建一个 UserControl,在该控件中使用编辑器并在 Winform 应用程序中使用该控件。这种方法帮助了我几次。

于 2011-05-05T17:42:14.950 回答
0

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

于 2011-08-07T04:32:15.057 回答