After a project, built with the standard MS controls, is successfully converted to a Telerik WinForms project, the subscriptions to certain events available in the Designer.cs file may disappear if you open the design view and make some changes. A solution for this behavior is described in the How to Deal with Disappearing Event Handlers after Opening the Designer for a Converted WinForms Project KB Article.
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.
When a RadSvgImage document is modified the cache of raster images needs to be cleared, so the modifications can be visualized.
For example we want to change the following SVG
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<defs>
<style>.cls-1{fill:none;stroke:#228bcb;stroke-miterlimit:5;stroke-width:1.2px;} </style>
</defs>
<g id="undoModern16">
<g id="icon">
<path class="cls-1" d="M5.61,10.36.82,5.51,5.61.63M9.5,14.5h1.28A4.51,4.51,0,0,0,15.38,10h0a4.52,4.52,0,0,0-4.6-4.5H.82" />
</g>
</g>
</svg>
Here is how it looks :
To change the color of this SVG we need to change the stroke color of the path that represents the arrow. First, we need to find the element of type SvgPath and then set its stroke to the desired color.
RadSvgImage svg = this.buttonUndo.SvgImage;
Svg.SvgPath path = svg.Document.Children.FindSvgElementOf<Svg.SvgPath>();
// set arrow color to gray(51,51,51)
path.Stroke = new Svg.SvgColourServer(System.Drawing.Color.FromArgb(51, 51, 51));
// no API to reset the cache
As a workaround we need to reassign the image of button:
// clear the cache of RadSvgImage
this.buttonUndo.SvgImage = null;
this.buttonUndo.SvgImage = svg;
Another possible workaround when working with LightVisualElement and its derivatives is to clear the cache with reflection:
var fi = svg.GetType().GetField("cachedSizesToImages", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
fi.SetValue(svg, new Dictionary<Size, Bitmap>());
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); } }
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).
I know it is not an easy task. I love the new vb.net form conversion to telerik form . Could you please make one from vb6 to telerik form conversion. I know I am asking for a lot but I am pretty sure your sales is going to skyrocket with this feature. Please think about it.
This theme is available in WPF suite. We have the Light and Dark variations as well.
Use attached to reproduce inside VisualStudio 2017. 1. Run "1342574 ListControl" project 2. Add CodedUI test in "1342574 CodeUISample" project. ("Record actions, edit UI map or add assertions" option) 3. After starting recording, click inside radGridView cell, type something and click Tab. 4. Pause and Generate Code. After running the recorded CodedUI test and you will see that it clicks on the grid cell but does not type any text. Note that the issue is not reproducible in VS 2012.
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>";
I have a winforms controls product with specific license of 2017.1.221.40 and I need to know what themes are available for this specific version and how to implement it, since I need to know if I can apply the them "VisualStudio2012DarkTheme" and how do it.
Poor support for custom DPI scaling in Windows 7 - Windows 10. There no null checking, and there is dirty hacks: CASE 1: RadPageViewElement public override void DpiScaleChanged(SizeF scaleFactor) { base.DpiScaleChanged(scaleFactor); if (this.Owner != null && this.Owner.Pages.Count > 1) { this.Owner.SuspendEvents(); if (this.Owner.SelectedPage == this.Owner.Pages[0]) { this.Owner.SelectedPage = this.Owner.Pages[1]; // NO NULL CHECKING this.Owner.SelectedPage = this.Owner.Pages[0]; // DIRTY HACK: users can have their own processing OnSelectedPage, which is unexpected here! } else { RadPageViewPage page = this.Owner.SelectedPage; this.Owner.SelectedPage = this.Owner.Pages[0]; this.Owner.SelectedPage = page; } CASE 2: public partial class RadForm1 : Telerik.WinControls.UI.RadForm { public RadForm1() { InitializeComponent(); radWizard1.Pages.Add(new WizardPage()); // when user has 100% Dpi, this code works normally. But if user has custom scale DPI (e.g. 101%), user received System.NullReferenceException: 'Object reference not set to an instance of an object.' (because because again there is no verification for ContentArea = null)... } } Please improve the work with custom DPI scaling!
To reproduce: please run the application provided in the ticket. You will notice that RadGridView stops updating. Workaround: use MethodInvoker for the update operation: private void readTicks() { DateTime now = DateTime.Now; Tick previouse = null; for (int i = 0; i < lines.Length; i++) { if (canceled) return; var t = new Tick(); try { try { JsonConvert.PopulateObject(lines[i], t); } catch { continue; } var c = contracts[t.ContractId]; c.Row[(int)t.TickType] = t; c.CurrentTickSetNr++; if (this.radGridView1.InvokeRequired) { this.radGridView1.Invoke(new MethodInvoker(delegate { c.Fire(t); })); } else { c.Fire(t); } previouse = t; OnTick?.Invoke(c.ConId, i); } catch (Exception e) { Debug.WriteLine(e.Message); } } OnDone?.Invoke(this, new EventArgs()); }
I'd like to represent, update and delete WinForms Scheduler events in a Kendo MVC Web application and visa versa. Some kind of data converter would be appreciated.
If you currently install the nuget package "UI.for.WinForms.Themes", all themes are loaded and referenced. If you only use one theme in the application, you have to remove all others manually. It would be nice if there was an extra package for each theme.
Is it possible to add a Hamburger Menu to the Telerik UI for WinForms? like: https://docs.microsoft.com/en-us/windows/uwp/design/controls-and-patterns/navigationview