Implement import and export of OpenDocument files (.odt).
In MS Word, when track changes are enabled, the users can choose to show the revisions in balloons, similar to comments. Add such possibility in RadRichTextBox as well.
Import description lists: <dl>, <dt>, <dd> tags. Possible way for implementation is with paragraphs with left margin.
API ideas: - DocumentSelection: Get inlines between annotation start and end, e.g. DocumentSelection.EnumerateChildrenOfType<>(bool includePartiallySelectedElements) where T : DocumentElement - DocumentSelection: SelectAnnotationRange(AnnotationRangeStart start, bool includeAnnotation). Such method is present without the last parameter, but it always selects the annotation ranges
When pressing Shift+Up(Down) should create a selection to the start(end) of the document when the caret position is on the first(last) line. Currently, in this case, a selection is not created. Such behavior can be achieved using the following approach: private void RadRichTextBox_CommandExecuting(object sender, CommandExecutingEventArgs e) { if (e.Command is MoveCaretCommand && System.Windows.Input.Keyboard.Modifiers == ModifierKeys.Shift) { var command = e.Command as MoveCaretCommand; MoveCaretDirections direction = (MoveCaretDirections)e.CommandParameter; if (direction == MoveCaretDirections.Up) { var positionOnFirstLine = new DocumentPosition(this.radRichTextBox.Document); positionOnFirstLine.MoveToFirstPositionInDocument(); if (this.radRichTextBox.Document.CaretPosition.Location.Y - positionOnFirstLine.Location.Y < 1) { this.radRichTextBox.Document.CaretPosition.MoveToPosition(positionOnFirstLine); e.Cancel = true; } } else if (direction == MoveCaretDirections.Down) { var positionOnLastLine = new DocumentPosition(this.radRichTextBox.Document); positionOnLastLine.MoveToLastPositionInDocument(); if (positionOnLastLine.Location.Y - this.radRichTextBox.Document.CaretPosition.Location.Y < 1) { this.radRichTextBox.Document.CaretPosition.MoveToPosition(positionOnLastLine); e.Cancel = true; } } } }
At this point, the FloatingUIContainers cannot be selected. Implement selection to enable the users to work easily with such elements.
This would enable the customers to track the content that is being inserted and decline its insertion if needed.
At the moment the table properties, including table, table row and table cell properties don't have size validation, i.e. it is possible to set them to negative or zero values. Validation should be added where necessary.
Currently RadRichTextBox uses the .NET syntax for the date and time formatting of the code fields. When such strings are exported to or imported from RTF/DOCX, the date and time formatting switch should be converted according to the document format specifications (e.g. 17.16.4.1 Date and time formatting from OOXML specification). Examples of differences: - 'tt' in .NET is converted to am/pm specifier for the current culture. In DOCX specification, this is denoted as 'am/pm' - '/' in .NET is converted to date separator for the current culture. In DOCX specification, the symbol doesn't have special meaning, so it's always converted to '/'. .NET date format strings: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings MS Word date format strings: https://support.office.com/en-us/article/insert-edit-and-view-fields-in-word-c429bbb0-8669-48a7-bd24-bab6ba6b06bb#bm9 Workaround (partial): Modify InsertDateTimeDialog to contain only formats which are compatible with MS Word.
The 'white-space' CSS property determines how whitespace inside an element is handled. The 'pre' value preserves the sequences of whitespaces and the newlines in the element content. This property value is supported by MS Word.
Implement built-in support for the Sogou Pinyin Input Method Editor. Sogou Pinyin is the most popular IME in China (above 80% of the users are using it). Currently RadRichTextBox doesn't support Sogou Pinyin IME out of the box, and the users have to manually implement it, as described in the "How to implement your own IME support?" ( https://docs.telerik.com/devtools/wpf/controls/radrichtextbox/ime-support#how-to-implement-your-own-ime-support ) help article and the CustomCaret (https://github.com/telerik/xaml-sdk/tree/master/RichTextBox/CustomCaret ) SDK example.
Currently unknown/unsupported elements are skipped, which potentially loses text content. Consider adding setting in HtmlImportOptions allowing the phrasing content (text) of these elements to be imported. Sample HTML: <html> <body> <test-test>test-test</test-test> <body/> </html> Browsers visualize it as "test-test", while RadRichTextBox doesn't import anything. MS Word imports such elements as inline elements (just like spans).
The field result shows the number of pages the current section contains.
<samp> HTML element could be imported as span with specific formatting. Currently it's just ommited.
Implement Auto Text gallery for inserting text. More information related to Auto Text can be found on the following post: https://support.office.com/en-us/article/automatically-insert-text-0bc40cab-f49c-4e06-bcb2-cd43c1674d1b
The Outline view shows the content of a document as bulleted points. It enables the user to easily move whole paragraphs within the document or to create headings.
Allow the customers to change the properties defined in the default stylesheet. They need to change properties like font size, font family, border-spacing, line-spacing, as in RadRichTextBox they might be different from the ones used by the browsers.
Loading large documents freezes the UI. Instead, the document could be imported and measured asynchronously in a background thread, and some progress indicator shown to the user.
Note: Image sources should be frozen when the document is loaded in a background thread.
Workaround: Following the steps:
- Import the document in a background thread using the specific format provider.
- Freeze all images in the document using the methods in the attached file.
- Set the document to RadRichTextBox in the main thread using a dispatcher: this.Dispatcher.Invoke(new Action(() => { this.radRichTextBox.Document = document; }));
Implement an option for the customers to split a document into two views, allowing them to edit and view different parts of the document at the same time.