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; } } }
ADD. RadPanorama - add save/load layout functionality so one can save and load the tiles size and position
Currently RadPanorama animates all visible tiles when clicking on a tile.
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.
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):
ADD. RadPanorama - add selection support with checkboxes
Provide means of auto arranging tiles without setting the Column and Row property.
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
IMPROVE. RadPanorama - the Items collection of the control should not accepts TileGroupElements
Enabling scrolling through the tiles at design time will let the developers select and edit in the designer tiles that are off-screen.
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.
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.
example: RadLiveTileElement tileElement = new RadLiveTileElement(); tileElement.Text = "&Applications"; tileElement.UseMnemonic = true; panorama.Items.Add(tileElement);
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;
To reproduce: Add few tiles to a group and subscribe to their MouseLeave event
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: 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
Current: Right-Clicking a RadTileElement in a RadPanorama responds the same as a Left-Click. Request: Right-Click displays a ContextMenu.
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.