To reproduce: 1.Use the provided xml file in the following article: http://www.telerik.com/help/winforms/richtexteditor-localization.html and change these strings: "Documents_ParagraphPropertiesDialog_TextAlignment_Center": "Mittig"; "Documents_ParagraphPropertiesDialog_TextAlignment_Justify": "Block"; "Documents_ParagraphPropertiesDialog_TextAlignment_Left": "Links"; "Documents_ParagraphPropertiesDialog_TextAlignment_Right": "Rechts"; 2.Afterwards, specify the RichTextBoxLocalizationProvider.CurrentProvider by loading the modified file. 3.Run the application, select some paragraph and try to change its alignment. As a result when the ParagraphPropertiesDialog is opened, incorrect alignment text is displayed in the drop-down. If you select a new value a handled ArgumentException is thrown and the paragraph is not aligned at all. Workaround: use a custom ParagraphPropertiesDialog: public Form1() { RichTextBoxLocalizationProvider.CurrentProvider = RichTextBoxLocalizationProvider.FromFile(@"..\..\RichTextBoxStrings - Copy.xml"); InitializeComponent(); this.radRichTextEditor1.RichTextBoxElement.ParagraphPropertiesDialog = new CustomDialog(); } public partial class CustomDialog : ParagraphPropertiesDialog { public CustomDialog() { InitializeComponent(); FieldInfo fi = typeof(ParagraphPropertiesDialog).GetField("radButtonOK", BindingFlags.Instance | BindingFlags.NonPublic); RadButton btn = fi.GetValue(this) as RadButton; btn.MouseDown += btn_MouseDown; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (selectedItem != null) { ButtonAlignement.Text = selectedItem.Text; } } public RadDropDownButton ButtonAlignement { get { FieldInfo fi = typeof(ParagraphPropertiesDialog).GetField("radDropDownButtonAlignement", BindingFlags.Instance | BindingFlags.NonPublic); RadDropDownButton radDropDownButtonAlignement = fi.GetValue(this) as RadDropDownButton; return radDropDownButtonAlignement; } } RadMenuItem selectedItem = null; RadDropDownButton radDropDownButtonAlignement = null; private void btn_MouseDown(object sender, MouseEventArgs e) { foreach (RadMenuItem item in ButtonAlignement.Items) { if (item.Text == ButtonAlignement.Text) { selectedItem = item; break; } } if (selectedItem != null) { ButtonAlignement.Text = selectedItem.Tag.ToString(); } } }
When the specified length of the stream is larger than the actual one, Adobe throws errors and removes the image. Workaround: Set the format provider settings: PdfFormatProvider provider = new PdfFormatProvider(); PdfExportSettings exportSettings = new PdfExportSettings(); exportSettings.ContentsDeflaterCompressionLevel = 9; exportSettings.ImagesDeflaterCompressionLevel = 9; provider.ExportSettings = exportSettings;
To reproduce: use the code snippet below. Please refer to the attached screenshot. public Form1() { RichTextBoxLocalizationProvider.CurrentProvider = new MyRichTextBoxLocalizationProvider(); InitializeComponent(); } public class MyRichTextBoxLocalizationProvider : RichTextBoxLocalizationProvider { public override string GetLocalizedString(string id) { return base.GetLocalizedString(id); } } Workaround: Modify the XML file containing all the strings RichTextBoxLocalizationProvider.CurrentProvider = RichTextBoxLocalizationProvider.FromFile(@"C:\RichTextBoxStrings.xml");. You can download a XML file that contains all the currently used strings from here: http://www.telerik.com/docs/default-source/ui-for-winforms/richtextboxstrings.zip?sfvrsn=2
Please refer to the attached screenshot. It is not possible to localize the marked label. Workaround: Sub New() InitializeComponent() Me.RadRichTextEditor1.RichTextBoxElement.InsertHyperlinkDialog = New CustomInsertHyperlinkDialog() End Sub Public Class CustomInsertHyperlinkDialog Inherits InsertHyperlinkDialog Protected Overrides Sub OnLoad(e As EventArgs) MyBase.OnLoad(e) Me.Controls("radLabel4").Text = "My address" End Sub End Class
Workaround: use a custom RichTextEditorRibbonBar Public Class CustomRichTextEditorRibbonBar Inherits RichTextEditorRibbonBar Dim headerText As String Protected Overrides Function GetInsertTableItems() As RadItemCollection Dim collection As RadItemCollection = MyBase.GetInsertTableItems() Dim headerItem As RadMenuInsertTableItem = TryCast(collection(0), RadMenuInsertTableItem) headerText = "My Header Text" Dim fi As FieldInfo = GetType(RadMenuInsertTableItem).GetField("header", BindingFlags.NonPublic Or BindingFlags.Instance) Dim header As LightVisualElement = fi.GetValue(headerItem) header.Text = headerText AddHandler header.TextChanged, AddressOf header_TextChanged Return collection End Function Private Sub header_TextChanged(sender As Object, e As EventArgs) Dim lve As LightVisualElement = TryCast(sender, LightVisualElement) If lve.Text = "Insert Table" Then lve.Text = headerText End If End Sub End Class
Currently, the scrollbars width is calculated only according to SystemInformation.VerticalScrollBarWidth. Workaround: class MyRTE : RadRichTextEditor { protected override void CreateChildItems(RadElement parent) { var rte = new MyRTEElement(); typeof(RadRichTextEditor).GetField("richTextBox", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(this, rte); parent.Children.Add(rte); } } public class MyRTEElement : RadRichTextBox { protected override SizeF ArrangeOverride(SizeF finalSize) { base.ArrangeOverride(finalSize); System.Drawing.RectangleF finalRect = new System.Drawing.RectangleF(System.Drawing.PointF.Empty, finalSize); System.Drawing.RectangleF clientRect = finalRect; System.Drawing.RectangleF horizontalScrollRect = System.Drawing.RectangleF.Empty; System.Drawing.RectangleF verticalScrollRect = System.Drawing.RectangleF.Empty; System.Drawing.RectangleF presenterArea = clientRect; if (this.VerticalScrollBar.Visibility != Telerik.WinControls.ElementVisibility.Collapsed) { verticalScrollRect = new System.Drawing.RectangleF( new System.Drawing.PointF(finalRect.Right - this.VerticalScrollBar.Size.Width, finalRect.Top), new System.Drawing.SizeF(this.VerticalScrollBar.Size.Width, finalRect.Height)); } if (this.HorizontalScrollBar.Visibility != Telerik.WinControls.ElementVisibility.Collapsed) { horizontalScrollRect = new System.Drawing.RectangleF( new System.Drawing.PointF(finalRect.Left, finalRect.Bottom - this.HorizontalScrollBar.Size.Height), new System.Drawing.SizeF(finalRect.Width, this.HorizontalScrollBar.Size.Height)); if (this.VerticalScrollBar.Visibility != Telerik.WinControls.ElementVisibility.Collapsed) { horizontalScrollRect.Width -= this.VerticalScrollBar.Size.Width; verticalScrollRect.Height -= this.HorizontalScrollBar.Size.Height; } } presenterArea.Width -= verticalScrollRect.Width; presenterArea.Height -= horizontalScrollRect.Height; if (this.RightToLeft) { horizontalScrollRect = Telerik.WinControls.Layouts.LayoutUtils.RTLTranslateNonRelative(horizontalScrollRect, clientRect); verticalScrollRect = Telerik.WinControls.Layouts.LayoutUtils.RTLTranslateNonRelative(verticalScrollRect, clientRect); presenterArea = Telerik.WinControls.Layouts.LayoutUtils.RTLTranslateNonRelative(presenterArea, clientRect); } this.VerticalScrollBar.Arrange(verticalScrollRect); this.HorizontalScrollBar.Arrange(horizontalScrollRect); var contentPresenter = typeof(RadRichTextBox).GetField("contentPresenter", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(this) as ContentControl; contentPresenter.Arrange(presenterArea); return finalSize; } protected override SizeF MeasureOverride(SizeF availableSize) { base.MeasureOverride(availableSize); System.Drawing.SizeF horizontalScrollSize = System.Drawing.SizeF.Empty; System.Drawing.SizeF verticalScrollSize = System.Drawing.SizeF.Empty; System.Drawing.SizeF presenterSize = availableSize; if (this.VerticalScrollBar.Visibility != Telerik.WinControls.ElementVisibility.Collapsed) { verticalScrollSize = new System.Drawing.SizeF(this.VerticalScrollBar.Size.Width, availableSize.Height); } if (this.HorizontalScrollBar.Visibility != Telerik.WinControls.ElementVisibility.Collapsed) { horizontalScrollSize = new System.Drawing.SizeF(availableSize.Width, this.HorizontalScrollBar.Size.Height); } presenterSize.Width -= verticalScrollSize.Width; presenterSize.Height -= horizontalScrollSize.Height; //presenterSize = base.GetClientRectangle(presenterSize).Size; this.VerticalScrollBar.Measure(verticalScrollSize); this.HorizontalScrollBar.Measure(horizontalScrollSize); var contentPresenter = typeof(RadRichTextBox).GetField("contentPresenter", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(this) as ContentControl; contentPresenter.Measure(presenterSize); return availableSize; } }
Workaround: public partial class Form1 : Form { private Telerik.WinForms.RichTextEditor.RichTextBoxUI.Dialogs.SpellCheckingDialog spellDlg; public Form1() { InitializeComponent(); } private void radButton1_Click(object sender, EventArgs e) { this.spellDlg = new Telerik.WinForms.RichTextEditor.RichTextBoxUI.Dialogs.SpellCheckingDialog(); Telerik.WinForms.Documents.UI.Extensibility.SpellCheckingUIManager manager = new Telerik.WinForms.Documents.UI.Extensibility.SpellCheckingUIManager(this.radRichTextEditor1.RichTextBoxElement); FieldInfo fi = this.spellDlg.GetType().GetField("suggestionsListBox", BindingFlags.NonPublic | BindingFlags.Instance); RadListControl suggestionListBox = fi.GetValue(this.spellDlg) as RadListControl; suggestionListBox.DataBindingComplete -= suggestionListBox_DataBindingComplete; suggestionListBox.DataBindingComplete += suggestionListBox_DataBindingComplete; this.spellDlg.ShowDialog(manager, this.radRichTextEditor1.RichTextBoxElement); } private void suggestionListBox_DataBindingComplete(object sender, ListBindingCompleteEventArgs e) { if (((RadListControl)sender).Items.Count == 0) { FieldInfo fiBtnChange = this.spellDlg.GetType().GetField("buttonChange", BindingFlags.NonPublic | BindingFlags.Instance); RadButton btnChange = fiBtnChange.GetValue(this.spellDlg) as RadButton; btnChange.Enabled = false; FieldInfo fiBtnChangeAll = this.spellDlg.GetType().GetField("buttonChangeAll", BindingFlags.NonPublic | BindingFlags.Instance); RadButton btnChangeAll = fiBtnChangeAll.GetValue(this.spellDlg) as RadButton; btnChangeAll.Enabled = false; } } }
The PreviewEditorKeyDown event is not fired when the user is typing in the editor. Workaround Create custom input behaviour: www.telerik.com/help/winforms/richtexteditor-keyboard-support.html
To reproduce: - Click the AA Styles button to open the Styles dialog. - Scroll down and select the CodeBlock item - The style does not change
Due to a namespace conflict, projects which reference Telerik.WinControls.RichTextBox.dll and target .NET 4.5 or above, cannot be built successfully if they are using some of the conflicting types. The conflict comes from the ICommand interface (https://msdn.microsoft.com/en-us/library/system.windows.input.icommand%28v=vs.110%29.aspx) which was moved from PresentationCore.dll to System.dll in .NET 4.5.
Workaround: public class CustomRadRichTextEditor : RadRichTextEditor { /// <summary> /// Gets or sets the width of the caret. /// </summary> [Browsable(false)] [Category(RadDesignCategory.AppearanceCategory)] public new float CaretWidth { get { float caretWidth = base.CaretWidth; if (float.IsNaN(caretWidth)) { return 2; } return caretWidth; } set { base.CaretWidth = value; } } }
Workaround use the following code to programatically toggle the spell check mode: RadRibbonBarGroup spellCheckGroup = ((RibbonTab)richTextEditorRibbonBar1.CommandTabs[0]).Items[3] as RadRibbonBarGroup; RadToggleButtonElement toggleButton = spellCheckGroup.Items[1] as RadToggleButtonElement; if (this.radRichTextEditor1.IsSpellCheckingEnabled) { toggleButton.CheckState = CheckState.Unchecked; } else { toggleButton.CheckState = CheckState.Checked; }
how to reproduce: check the attached video
The "Style" gallery is reinitialized each time the AssociatedRichTextEditor is changed.
To reproduce: - Add several RadRichTextEditors to a form. - Change the icon of the FontPropertiesDialog. - Close the form and force the garbage collector. Workaround: protected override void OnClosing(CancelEventArgs e) { base.OnClosing(e); foreach (var item in this.Controls) { var rte = item as RadRichTextEditor; if (rte != null) { ((FontPropertiesDialog)rte.RichTextBoxElement.FontPropertiesDialog).Dispose(); } } }
How to reproduce: check the attached video