Hello
I have a problem with onClick event on RadTileElement. After upgrade WinForms to version 2020.3.915.40 i stopped working. Please let me know how is going on.
Regards
Slawek
Workaround: use the attached theme https://docs.telerik.com/devtools/winforms/themes/using-custom-themes
Open the attached project and show the designer. Open the tile's smart tag and try to enter a non numeric symbol for the column and press Enter.
To reproduce: public Form1() { InitializeComponent(); this.radPanorama1.ShowGroups = true; TileGroupElement group = new TileGroupElement(); group.Name = "Group1"; this.radPanorama1.Groups.Add(group); for (int i = 0; i < 20; i++) { group.Items.Add(new RadTileElement()); } group.RowsCount = 5; this.radPanorama1.ScrollBarAlignment = HorizontalScrollAlignment.Bottom; } Workaround: set the ScrollBarAlignment property to HorizontalScrollAlignment.Top
To reproduce: 1.Open Demo Hub example and maximize the form. 2.Start dragging "Maginifier" tile. 3. Try to drop it to the last group. You will notice that horizontal scrollbar does not move when the form is maximized. However, it behaves as expected if the form is not maximized. Workaround: public Form1() { InitializeComponent(); this.radPanorama1.PanoramaElement.DragDropService = new CustomService(this.radPanorama1.PanoramaElement); } public class CustomService : TileDragDropService { public RadPanoramaElement OwnerElement { get; set; } public CustomService(RadPanoramaElement owner) : base(owner) { OwnerElement = owner; } public int ScrollStep { get { return (int)typeof(TileDragDropService).GetField("scrollStep", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this); } set { typeof(TileDragDropService).GetField("scrollStep", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(this, value); } } protected override void HandleMouseMove(Point mousePos) { Point clientPoint = OwnerElement.PointFromScreen(mousePos); Timer scrollTimer = typeof(TileDragDropService).GetField("scrollTimer", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this) as Timer; if (clientPoint.X > this.OwnerElement.Size.Width - 5) { ScrollStep = (clientPoint.X - this.OwnerElement.Size.Width) + 5; if (!scrollTimer.Enabled) { scrollTimer.Start(); } } else if (clientPoint.X < 5) { ScrollStep = clientPoint.X - 5; if (!scrollTimer.Enabled) { scrollTimer.Start(); } } else { base.HandleMouseMove(mousePos); } } }
To reproduce: public Form1() { InitializeComponent(); this.radPanorama1.RowsCount = 5; this.radPanorama1.ColumnsCount = 1; this.radSpinEditor1.DataBindings.Add("Value", this.radPanorama1, "RowsCount", true, DataSourceUpdateMode.OnPropertyChanged); for (int i = 0; i < 5; i++) { RadTileElement tile = new RadTileElement(); tile.Text = "Tile" + (i ); tile.Row = i ; this.radPanorama1.Items.Add(tile); } } Please refer to the sample video: http://screencast.com/t/lncUvh0vIRKN Workaround: private void radPanorama1_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName=="RowsCount") { this.radPanorama1.PanoramaElement.InvalidateMeasure(true); } }
To reproduce: Me.RadPanorama1.ShowGroups = True Dim group1 As New TileGroupElement group1.Text = "Group1" Me.RadPanorama1.Groups.Add(group1) group1.ColumnsCount = 3 group1.RowsCount = 5 group1.CellSize = New Size(200, 100) Me.RadPanorama1.Groups.Add(group1) For i = 0 To 2 For j = 0 To 2 Dim tile As New RadTileElement() tile.Row = i tile.Column = j tile.Text = "tile" & i & "." & j group1.Items.Add(tile) Next Next Dim group2 As New TileGroupElement group2.Text = "Group2" Me.RadPanorama1.Groups.Add(group2) group2.ColumnsCount = 3 group2.RowsCount = 5 Me.RadPanorama1.Groups.Add(group1) For i = 0 To 2 For j = 0 To 2 Dim tile As New RadTileElement() tile.Row = i tile.Column = j tile.Text = "tile" & i & "." & j group2.Items.Add(tile) Next Next
To reproduce: Add 2 TileGroupElements to a RadPanorama. Set the rowcount of the first to 2 and to the second one to 1. Add a tile to the first group and set its rowspan to 2. Start the application drag the tile, you will see exception. Workaround: Create a custom TileDragDropService: public class MyTileDragDropService : TileDragDropService { private Action<TileGroupElement, RadTileElement, int> OffsetTiles; private RadPanoramaElement Owner; public MyTileDragDropService(RadPanoramaElement owner) : base(owner) { this.Owner = (RadPanoramaElement)typeof(TileDragDropService).GetField("owner", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this); MethodInfo matchedMethod = null; foreach (MethodInfo method in typeof(TileDragDropService).GetMethods(BindingFlags.Instance | BindingFlags.NonPublic)) { if (method.Name == "OffsetTiles" && method.GetParameters().Length == 3) { matchedMethod = method; break; } } this.OffsetTiles = (Action<TileGroupElement, RadTileElement, int>)matchedMethod.CreateDelegate(typeof(Action<TileGroupElement, RadTileElement, int>), this); } protected override void HandleGroupedDragDrop(RadDropEventArgs e) { RadTileElement target = e.HitTarget as RadTileElement; RadTileElement source = this.Context as RadTileElement; Point dropLocation = e.DropLocation; if (target != null) { dropLocation = target.PointToControl(dropLocation); } TileGroupElement @group = GetTargetGroup(new RectangleF(dropLocation, source.Size)); if (source == null || @group == null) { return; } Point targetCell = GetTargetCell(@group, dropLocation); if (targetCell.X == -1) { return; } targetCell.X = Math.Abs(Math.Min(targetCell.X, @group.RowsCount - source.RowSpan)); if (targetCell.X >= @group.RowsCount) { targetCell.X = @group.RowsCount - 1; } source.Row = targetCell.X; source.Column = targetCell.Y; if (!@group.Items.Contains(source)) { (source.Parent.Parent as TileGroupElement).Items.Remove(source); @group.Items.Add(source); } int oldColSpan = source.ColSpan; source.ColSpan = 0; this.OffsetTiles(@group, source, oldColSpan); source.ColSpan = oldColSpan; source.Column -= oldColSpan; this.Owner.InvalidateMeasure(true); this.Owner.UpdateLayout(); return; } } And set it to the panorama: panorama.PanoramaElement.DragDropService = new MyTileDragDropService();
To reproduce add a tile and set its ImageIndex before adding images to the ImageList. Here is design time code: // // radTileElement1 // this.radTileElement1.AccessibleDescription = "radTileElement1"; this.radTileElement1.AccessibleName = "radTileElement1"; this.radTileElement1.ImageIndex = 0; this.radTileElement1.Name = "radTileElement1"; this.radTileElement1.Text = "radTileElement1"; this.radTileElement1.Visibility = Telerik.WinControls.ElementVisibility.Visible; // // imageList1 // this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); this.imageList1.TransparentColor = System.Drawing.Color.Transparent; this.imageList1.Images.SetKeyName(0, "checkmark.png"); Workaround - put the image list population before the ImageIndex setting in the designer // // imageList1 // this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); this.imageList1.TransparentColor = System.Drawing.Color.Transparent; this.imageList1.Images.SetKeyName(0, "checkmark.png"); // // radTileElement1 // this.radTileElement1.AccessibleDescription = "radTileElement1"; this.radTileElement1.AccessibleName = "radTileElement1"; this.radTileElement1.ImageIndex = 0; this.radTileElement1.Name = "radTileElement1"; this.radTileElement1.Text = "radTileElement1"; this.radTileElement1.Visibility = Telerik.WinControls.ElementVisibility.Visible;
ADD. RadPanorama - add save/load layout functionality so one can save and load the tiles size and position
To reproduce: Add few tiles to a group and subscribe to their MouseLeave event
Add a tile to a RadPanorama groups, and set its Image or BackgroundImage property with an animated gif image. Run the project and zoom out the view using the mouse wheel. The tile with the animated gif will disappear.
Enabling scrolling through the tiles at design time will let the developers select and edit in the designer tiles that are off-screen.
If you add 10 tiles in 2 columns of 5 tiles and run the project, you will see that the tiles are not correctly positioned. This happens only if AutoArrangeNewTiles is true.
IMPROVE. RadPanorama - the Items collection of the control should not accepts TileGroupElements
The position of a tile might get changed when the project is run and if the Row or Column properties of this tile have their default value of 0.
Steps to reproduce: 1. Add a RadPanorama to a form 2. Set the PanelImage to (none) 3. Run the project and you will see that the default image will be applied. At this time it seems that there is no way to prevent the default image from being applied. Until a decent solution is found (if any), this property is removed from the designer. COMMENT: This property should not be supported in design-time, because it is modified by each theme
Adding a tile with ColSpan property set to greater than 1 raises exception