MS Word分页使用多个wpf RichTextBox

时间:2010-11-26 05:55:52

标签: wpf richtextbox

我的目标是使编辑器的行为类似于MS-Word.Wpf RichTextBox是一个很棒的控件。通过将它放在ScrollViewer中,我们可以使它可编辑。(就像一个记事本)。但我需要MS-像页面一样的字。一种有效的方法可能是将样式应用于scrollViewer,以便我们在richtextbox上创建多个页面的外观和感觉,但我不知道该怎么做。我们在项目中做的是使用documentViewer。在FixedPage内,创建一个Header(Canvas),Body(WpfRichTextBox),Footer(Canvas)。因此创建多个页面,并通过订阅RichTextBox sizechanged事件,我们手动进行分页,即在高度发生变化时将块从一个页面移动到另一个页面。你有没有看到更好的方法呢?使用多个richtextbox会妨碍我的表现吗?

2 个答案:

答案 0 :(得分:1)

@WpfProgrammer这是我会说的好方法。假如你有1000页,那肯定会出现性能问题。为了避免这个问题,您需要进行请求分页。

虚拟寻呼:
 1.您需要构建一个包含页面的页表。每个页面都包含有关页面的控件,图像,位置,尺寸和样式的信息。 [所有可序列化数据]

 2.虚拟页面 - 您需要     反序列化所有数据     页面并创建一个页面     RichTextBox的。虚拟页面是     只是,预先缓存的页面     将被渲染。说的     例。如果我在第一页。然后,     我将在接下来的3个系列化     连续的页面并将它们放在一个     采集。然后,重复一遍     连续页面的程序     动作。使用添加一些逻辑     最常用的集合。它     会足够快。如果是     1000页。你可以崩溃     那些不脏或从未访问过的人     页面。这可能会产生更多     性能。如果表现很远     更关注低硬件。     然后,你应该考虑     清洗。

3.清洁 -     清洁是一个过程     识别LFU页面并删除     他们。如果,这将非常有用     表现更为明显。

答案 1 :(得分:1)

嗨Tameem 将richTextBox的最小高度和宽度设置为A4大小(比如说)。订阅RichTextBox Size Changed事件。一旦内容超出,就会触发此事件。然后我将上一页的最后一个块推送到下一页的第一个块。(请记住,如果页面不存在,则需要创建然后将焦点添加到新页面。(因为如果您在最后一个RTB按Enter键,您希望焦点位于新页面中。)删除某个页面中的一个块(比如说第二个),然后你需要将所有底页块添加到这个页面,这样我们的分页逻辑就会再次按下块并进行调整。如果您需要进一步的帮助,我可以分享一些代码。