After revamping the documentation for the Telerik UI for WinForms product, the following problems occurred: 1. Search for a specific class or method in the search box in the following site: https://docs.telerik.com/devtools/winforms/introduction. Select one of the results referring to the API documentation. As a result you will be navigated to the main page of the API reference instead of to the respective class or method. Refer to the Problem1.gif file. It seems that the search results from the API reference return old links for the previous API link pattern. 2. The search box in https://docs.telerik.com/devtools/winforms/api/ is significantly lagging while typing. We should consider performing the search operation after pressing Enter and not with each keystroke. Please refer to the Problem2.gif file. 3. When you scroll the navigation view on the left side to a certain position and select an article, the vertical scrollbar sometimes gets reset to the top position and you have to scroll back. (Note that this problem is not reproduced each time).
StackTrace:
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Telerik.WinControls.VisualElement.GetScaledFont(Single scale)
at Telerik.WinControls.UI.LightVisualElement.CreateTextParams()
at Telerik.WinControls.UI.GridCellElement.CreateTextParams()
at Telerik.WinControls.UI.TextPart.Measure(SizeF availableSize)
KeyNotFoundException when trying to access a dictionary in GetScaledFont, because of race condition, when setting a Font in another thread.
1. Create a new project and add RadForm. 2. Open the form at design time. 3. Set its ThemeName to ControlDefault. 4. Choose the Reset option from the ThemeName drop down. 5. Repeat this operation several times and watch how form size changes.
To reproduce: Add some buttons to a form set the theme to Fluent and press the button using the space button Workaround: Use the attached theme.
To reproduce: -use RadForm with WindowState=Maximized at design-time; -add RadPanel with Dock = Top; -after running the application minimize the form and maximize it again; as a result the form title bar is cut off. Workaround: set Margin of the FormElement and Top docked panel when maximizing: private void Form1_SizeChanged(object sender, EventArgs e) { RadForm form = sender as RadForm; if (form != null) { if (form.WindowState == FormWindowState.Maximized) { form.FormElement.Margin = new Padding(0, 8, 0, 0); (form.Controls[0] as RadPanel).PanelElement.Margin = new Padding(0, 20, 0, 0); } } }
RadOffice2007ScreenTipElement does not have all themes (except the ControlDefault Theme)
workaround: public class MyGridView : RadGridView { public override string ThemeClassName { get { return typeof(RadGridView).FullName; } } protected override void ProcessCodedUIMessage(ref IPCMessage request) { if (request != null) //here is the problematic point base.ProcessCodedUIMessage(ref request); } }
Workaround: set the property with code this.radListView1.ListViewElement.ViewElement.VScrollBar.MinThumbLength = 50;
How to reproduce: this.radLabel1.Font = new System.Drawing.Font("Arial", 20F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); Workaround: public class MyRadLabel : RadLabel { public override string ThemeClassName { get { return typeof(RadLabel).FullName; } } protected override RadLabelElement CreateLabelElement() { return new MyRadLabelElement(); } } public class MyRadLabelElement : RadLabelElement { protected override Type ThemeEffectiveType { get { return typeof(RadLabelElement); } } protected override void CreateChildElements() { base.CreateChildElements(); MyTextPrimitive textPrimitive = new MyTextPrimitive(); textPrimitive.Alignment = ContentAlignment.MiddleLeft; textPrimitive.BindProperty(TextPrimitive.TextProperty, this, RadLabelElement.TextProperty, PropertyBindingOptions.TwoWay); textPrimitive.BindProperty(AlignmentProperty, this, RadLabelElement.TextAlignmentProperty, PropertyBindingOptions.OneWay); textPrimitive.SetValue(ImageAndTextLayoutPanel.IsTextPrimitiveProperty, true); textPrimitive.AutoEllipsis = true; textPrimitive.TextWrap = true; ImageAndTextLayoutPanel layoutPanel = this.FindDescendant<ImageAndTextLayoutPanel>(); if (layoutPanel != null) { layoutPanel.Children.RemoveAt(1); layoutPanel.Children.Add(textPrimitive); } } } public class MyTextPrimitive : TextPrimitive { public override Font GetScaledFont(float scale) { Screen screen = Screen.PrimaryScreen; SizeF startScale = new SizeF(1.0f, 1.0f); if (RadControl.EnableDpiScaling) { startScale = NativeMethods.GetMonitorDpi(screen, NativeMethods.DpiType.Effective); } SizeF paintScale = new SizeF(scale / startScale.Width, scale / startScale.Height); Font font = this.Font ?? Control.DefaultFont; string key = paintScale.ToString() + font.FontFamily.Name + font.Size + font.Style.ToString() + font.Unit.ToString() + font.GdiCharSet.ToString() + font.GdiVerticalFont.ToString(); if (this.ScaledFontsCache.ContainsKey(key)) { return this.ScaledFontsCache[key]; } Font scaledFont = new Font(font.FontFamily, font.Size * paintScale.Height, font.Style, font.Unit, font.GdiCharSet, font.GdiVerticalFont); this.ScaledFontsCache.Add(key, scaledFont); return scaledFont; } }
How to reproduce: store an image on the file and try to use it this way string path = @"D:\img.png"; this.radLabel1.Text = "<html><img src=" + path + "><b>Test</b></html>"; Workaround: if possible embed the image in the assembly and use it as a resource this.radLabel1.Text = "<html><img src=res:_1133506_RadLabelLinkHtmlLike.img.png><b>Test</b></html>";
Use attached project to reproduce. Workaround: Use attached theme.
Workaround: use a bigger image Me.radCheckBox1.ButtonElement.CheckMarkPrimitive.CheckElement.ShouldPaint = False Dim dpi As Point = NativeMethods.GetSystemDpi() Dim scale As Integer = dpi.X If scale >= 300 Then Me.radCheckBox1.ButtonElement.CheckMarkPrimitive.Image = Image.FromFile("..\..\check-mark.png") ElseIf scale >= 200 Then '... Else '... End If
To reproduce: - Open Theme Viewer, go ListView and sort it. - Change the theme to Fluent. Workaround: - Set the visibility of the item in the theme (see attached).
The ImageList property is visible in the Properties section of VisualStudio for RadTextBox, RadTextBoxControl etc.
How to reproduce: set the MinimumSize property of a RadButton in a DPI-aware app Workaround: Public Class RadForm1 Dim minMaxStack = New Stack(Of Dictionary(Of Control, Tuple(Of Size, Size)))() Sub New() InitializeComponent() End Sub Protected Overrides Sub HandleDpiChanged() Dim scaleFactor As Single = 1.0F Dim oldDpi = GetType(RadFormControlBase).GetField("oldDpi", BindingFlags.Instance Or BindingFlags.NonPublic).GetValue(Me) Dim currentDpi = GetType(RadFormControlBase).GetField("currentDpi", BindingFlags.Instance Or BindingFlags.NonPublic).GetValue(Me) If oldDpi <> 0 Then scaleFactor = CSng(currentDpi) / oldDpi ElseIf oldDpi = 0 Then scaleFactor = CSng(currentDpi) / 96.0F End If If scaleFactor = 1.0F Then Return End If Me.SaveMinMaxStates() MyBase.HandleDpiChanged() Me.RestoreMinMaxStates() End Sub Private Sub SaveMinMaxStates() If Me.minMaxStack Is Nothing Then Me.minMaxStack = New Stack(Of Dictionary(Of Control, Tuple(Of Size, Size)))() End If Dim minMax As New Dictionary(Of Control, Tuple(Of Size, Size))() Dim queue As New Queue(Of Control)() For Each ctrl As Control In Me.Controls queue.Enqueue(ctrl) Next While queue.Count > 0 Dim ctrl As Control = queue.Dequeue() If TypeOf ctrl Is RadControl Then minMax.Add(ctrl, New Tuple(Of Size, Size)(ctrl.MinimumSize, ctrl.MaximumSize)) ctrl.MinimumSize = Size.Empty ctrl.MaximumSize = Size.Empty End If For Each childControl As Control In ctrl.Controls queue.Enqueue(childControl) Next End While Me.minMaxStack.Push(minMax) End Sub Private Sub RestoreMinMaxStates() Dim minMax As Dictionary(Of Control, Tuple(Of Size, Size)) = Me.minMaxStack.Pop() Dim queue As New Queue(Of Control)() For Each ctrl As Control In Me.Controls queue.Enqueue(ctrl) Next While queue.Count > 0 Dim ctrl As Control = queue.Dequeue() If minMax.ContainsKey(ctrl) Then ctrl.MinimumSize = minMax(ctrl).Item1 ctrl.MaximumSize = minMax(ctrl).Item2 minMax.Remove(ctrl) End If For Each childControl As Control In ctrl.Controls queue.Enqueue(childControl) Next End While minMax.Clear() End Sub End Class
Extract the source in a folder like this: "Telerik UI for WinForms R3 2017" Workaround: Remove the spaces in the path.
Workaround: 1. Explicitly set the font of the parent of the controls. 2. Use a custom theme with the FontSegoeUI8.25 repository: check the attached screenshot
Workaround: 1. Explicitly set the font of the checkbox with code. this.radCheckBox1.Font = new Font("Segoe UI", 9.0f, FontStyle.Regular); 2. Use the attached custom theme.
How to reproduce: check the attached screenshot Workaround create a custom RadPrintPreviewDialog public class MyRadPrintPreviewDialog : RadPrintPreviewDialog { protected override WatermarkPreviewDialog CreateWatermarkDialog() { WatermarkPreviewDialog dialog = new WatermarkPreviewDialog(this.Document); RadPageViewPage pageText = (RadPageViewPage)dialog.Controls["radPageView1"].Controls["pageText"]; ((PlusMinusEditor)pageText.Controls["plusMinusEditorTextHOffset"]).TextBox.Width = 43; ((PlusMinusEditor)pageText.Controls["plusMinusEditorTextVOffset"]).TextBox.Width = 43; ((PlusMinusEditor)pageText.Controls["plusMinusEditorTextAngle"]).TextBox.Width = 43; ((PlusMinusEditor)pageText.Controls["plusMinusEditorTextOpacity"]).TextBox.Width = 43; RadPageViewPage pagePicture = (RadPageViewPage)dialog.Controls["radPageView1"].Controls["pagePicture"]; ((PlusMinusEditor)pagePicture.Controls["plusMinusEditorImageHOffset"]).TextBox.Width = 43; ((PlusMinusEditor)pagePicture.Controls["plusMinusEditorImageVOffset"]).TextBox.Width = 43; ((PlusMinusEditor)pagePicture.Controls["plusMinusEditorImageOpacity"]).TextBox.Width = 43; return dialog; } }