2010-11-26 23 views
1

我的目標是讓編輯器的行爲類似於MS-Word.Wpf RichTextBox是一個非常棒的控件。通過將它放在ScrollViewer中,我們可以使它變得可編輯(就像記事本)但是我需要像頁面一樣的MS-Word。一種有效的方式可能是將樣式應用於scrollViewer,以便我們在richtextbox上創建多個頁面的外觀和感覺,但是我不知道如何去做。我們在項目中做了什麼是使用documentViewer。在FixedPage中,創建一個Header(Canvas),Body(WpfRichTextBox),Footer(Canvas)。因此,創建多個頁面,並通過訂閱RichTextBox的sizechanged事件,我們手動進行分頁,即在高度發生變化時將塊從一個頁面移動到另一個頁面。你看到有更好的方法嗎?使用多個richtextbox會妨礙我的表現嗎?使用多個wpf RichTextBox的MS Word分頁

回答

1

@WpfProgrammer這是我想說的好方法。說如果你有1000頁的話,肯定會有性能問題。爲了避免這個問題,你需要做需求分頁。

虛擬尋呼:
1.您需要構建一個包含頁面的頁表。每個頁面將包含有關控件,圖像,位置,尺寸和頁面樣式的信息。 [所有可序列化數據]

2.虛擬頁面 - 您需要 對 頁面的所有數據進行反序列化,並使用 RichTextBox創建頁面。虛擬頁面是 ,但是,預緩存頁面 將要呈現。例如說 的例子。如果我在第一頁。然後, 我將刪除下一個3 連續頁面,並將它們放在 集合中。然後,爲連續頁面 移動重複此 過程。使用 最常用的集合添加一些邏輯。它 將足夠快。在 1000頁的情況下。您可以摺疊 那些非骯髒或從未訪問過 頁面。這可能會產生更多的性能。如果性能遠不如 更關心低硬件。 然後,你應該考慮清潔 。

3.清洗 - 清洗是標識LFU頁面的 和刪除 它們的過程。如果 表現更明顯,這將非常有幫助。

+0

非常感謝頁面虛擬化方法。對我而言,每個編輯器的最大頁數不會超過50個。可能會有2到3個編輯器啓動,但我認爲虛擬化確實可以提高整體性能。我看到的挑戰是分頁,儘管我有一個基本的算法。將塊從一個richtextbox移動到另一個,甚至在刪除操作期間將內容向上移動是一項挑戰。在這種情況下進行虛擬化也很棘手。是否有沒有直接的方式顯示像MS Word這樣的richTextBox頁面? – WpfProgrammer 2010-11-26 08:57:21

1

嗨Tameem 設置最小高度,richTextBox的寬度爲A4尺寸(可以說)。訂閱RichTextBox Size Changed事件。一旦內容超過,這個事件就會被解僱。然後我拿走上一頁的最後一個塊,並將它推到下一頁的第一個塊(記住如果頁面不存在,你需要創建新頁面然後將其添加爲第一個塊),並且焦點也應該更改爲新頁面(因爲如果在最後一個RTB處按回車鍵,則期望焦點在新頁面中)當用戶刪除某個頁面中的塊(比如2nd),然後您需要將所有底部頁面塊添加到此頁面,以便我們的分頁邏輯將再次將塊推下並進行調整。如果你需要進一步的幫助,我可以分享一些代碼。