A user reported a significant performance impact with the RichTextBox in our recent update. The UI hangs repeatedly while typing.
Profiling showed a lot of garbage collections, and profiling highlighted the the Telerik class Telerik.Windows.Controls.MarkupExtensions.DocumentsResourceProvider.
#if NETCORE
private static Style ThemeStyle
{
get
{
if (themeStyle == null)
{
themeStyle = GetStyleFromApplicationTheme();
}
return themeStyle;
}
}
private static Style GetStyleFromApplicationTheme()
{
if (StyleManager.IsEnabled && StyleManager.ApplicationTheme != null)
{
var themeName = StyleManager.ApplicationTheme.GetType().Name.Trim('_').ToLower();
themeName = themeName.Replace("theme", string.Empty);
var themesGeneric = Application.LoadComponent(new Uri("/Telerik.Windows.Controls.RichTextBox;component/themes/generic.xaml", UriKind.Relative)) as ResourceDictionary;
if (themesGeneric != null)
{
var currentThemeDictionary = themesGeneric.MergedDictionaries.FirstOrDefault(rd => rd.Source != null && rd.Source.OriginalString.ToLower().Contains(themeName));
if (currentThemeDictionary != null)
{
return currentThemeDictionary[typeof(DocumentsResourceProvider)] as Style;
}
}
}
return null;
}
I copied this code into my project to debug it, and found:
As the method returns null, it means themeStyle is always null, and it will try again on the next caller. This code is called repeatedly while typing. Using my code (and reflection) to force this ThemeStyle to Fluent fixes the performance, though obviously is a huge workaround.
When ScaleFactor is set to less that (1,1), this causes the caret to disappear at specific positions in the document. These positions depend on the exact value of the scale factor. The focus is still in the editor and users can type. Note that if the scale factor changes, the positions where the caret is not visualized will change as well.
Add support for line numbering in paged layout mode, similar to MS Word.
Copying content controls using DocumentFragment and then inserting them causes several undesired behaviors.
For example, if the original content control is in "Placeholder mode" (meaning the initial pre-generated text is intact), after the copy operation, its content is treated as user inserted and it is not fully selected on entering the control. Another issue is with Plain Text/Date Picket/Repeating Section control - after the copy, their Properties dialog cannot be shown.
RichTextBox: The RepeatButtonStyle is not merged in the RichTextBox Xaml file when declaring the styles on a window level.
Workaround: Add the dictionaries to the App.xaml file instead of the Window file.