ADD. RadPanorama - add save/load layout functionality so one can save and load the tiles size and position
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
This will allow the users to scroll through the tiles in all rows when the available height is insufficient. WORKAROUND: class CustomPanorama : RadPanorama { RadScrollBarElement vScroll; protected override void CreateChildItems(Telerik.WinControls.RadElement parent) { base.CreateChildItems(parent); this.vScroll = new RadScrollBarElement(); this.vScroll.ScrollType = ScrollType.Vertical; this.vScroll.StretchHorizontally = false; this.vScroll.StretchVertically = true; this.vScroll.MinSize = new System.Drawing.Size(16, 0); this.vScroll.Alignment = System.Drawing.ContentAlignment.TopRight; this.PanoramaElement.Children.Add(vScroll); this.vScroll.ValueChanged += new EventHandler(vScroll_ValueChanged); this.PanoramaElement.GroupLayout.RadPropertyChanged += new Telerik.WinControls.RadPropertyChangedEventHandler(GroupLayout_RadPropertyChanged); this.PanoramaElement.TileLayout.RadPropertyChanged += new Telerik.WinControls.RadPropertyChangedEventHandler(GroupLayout_RadPropertyChanged); this.ScrollBarAlignment = HorizontalScrollAlignment.Bottom; } void GroupLayout_RadPropertyChanged(object sender, Telerik.WinControls.RadPropertyChangedEventArgs e) { if (e.Property == RadElement.BoundsProperty && sender == this.GetCurrentLayout()) { UpdateVScroll(); } } protected override void OnSizeChanged(EventArgs e) { base.OnSizeChanged(e); UpdateVScroll(); } private void UpdateVScroll() { vScroll.Maximum = this.GetCurrentLayout().Size.Height; vScroll.LargeChange = Math.Max(0, (int)(this.Size.Height - this.PanoramaElement.ScrollBar.Size.Height)); if (vScroll.LargeChange >= vScroll.Maximum) { vScroll.Visibility = ElementVisibility.Hidden; } else { vScroll.Visibility = ElementVisibility.Visible; } if (this.PanoramaElement.ScrollBar.Visibility == ElementVisibility.Visible) { vScroll.Margin = new System.Windows.Forms.Padding(0, 0, 0, this.PanoramaElement.ScrollBar.Size.Height); } else { vScroll.Margin = new System.Windows.Forms.Padding(0); } } void vScroll_ValueChanged(object sender, EventArgs e) { this.GetCurrentLayout().PositionOffset = new System.Drawing.SizeF(0, -this.vScroll.Value); } private LayoutPanel GetCurrentLayout() { if (this.ShowGroups) { return this.PanoramaElement.GroupLayout; } return this.PanoramaElement.TileLayout; } public override string ThemeClassName { get { return typeof(RadPanorama).FullName; } set { base.ThemeClassName = value; } } }
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.
If i have lots of group, the horizontal axis gets full with the square 4x4 groups, but the vertacal axis has lots of empty space.
I could break the squareness of the groups to make them longer in the vertical axis, but that seems a bit ugly.
However, I cannot seem to find a way to put a group under another group, therefore utilising both the X and Y dimensions well.
Can it be done?
i.e.
--Group 1-- --Group2--
Tile Tile Tile Tile
Tile Tile Tile Tile
--Group 3--
Tile Tile
Tile Tile
Before (How it is now):
After (How I'm proposing it can be):
Workaround: use the attached theme https://docs.telerik.com/devtools/winforms/themes/using-custom-themes
It would be nice if the user is allowed to edit the tiles.
ADD. RadPanorama - add selection support with checkboxes
Currently RadPanorama animates all visible tiles when clicking on a tile.
example: RadLiveTileElement tileElement = new RadLiveTileElement(); tileElement.Text = "&Applications"; tileElement.UseMnemonic = true; panorama.Items.Add(tileElement);
The user should be able to select tiles with the mouse or with the arrow keys.
IMPROVE. RadPanorama - increase the RowsCount when the form's size is increased, so the user will be able to drag items there.
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
IMPROVE. RadPanorama - the Items collection of the control should not accepts TileGroupElements
To reproduce: 1. Add a RadPanorama with several tiles at design time. 2. Open the RadItem Collection Editor and try to reorder the items by using the arrows. Press OK. As a result, the tiles in the form are not ordered as expected although the order in the Collection Editor is the desired one. Workaround: add the tiles at run-time in the correct order.
Current: Right-Clicking a RadTileElement in a RadPanorama responds the same as a Left-Click. Request: Right-Click displays a ContextMenu.
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.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: 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); } }