It is possible to add one control, but when when you try to add other controls to the layout, just sits where you place it rather than split in to sections.
Expected:
Actual:
I can not add any type of control to the layoutControlGroupItem. I have a screen recording of me trying to follow the procedure shown but it is 60M so I can't attach it. I shared the file on my OneDrive if you would like to access it that way.
To reproduce:
private void RadButton5_Click(object sender, EventArgs e)Workaround:
private void RadButton5_Click(object sender, EventArgs e)
{
RadButton labelControl = new RadButton();
labelControl.Size = new Size(200, 30);
labelControl.Text = "Test";
((RadLayoutControlControlCollection)this.radLayoutControl1.Controls).RemoveInternal(layoutControlItem1.AssociatedControl);
((RadLayoutControlControlCollection)this.radLayoutControl1.Controls).AddInternal(labelControl);
layoutControlItem1.AssociatedControl = labelControl;
layoutControlItem1.UpdateControlBounds();
}
Hide Item option in the context menu should not be present for those items. We should also consider a cancellable ItemHiding event. The custom control below handles this scenario: public class CustomRadLayoutControl : RadLayoutControl { public override string ThemeClassName { get { return typeof(RadLayoutControl).FullName; } } protected override void InitializeDropDownMenu() { FieldInfo hideMenuItemFi = typeof(RadLayoutControl).GetField("hideMenuItem", BindingFlags.Instance | BindingFlags.NonPublic); RadMenuItem hideMenuItem = hideMenuItemFi.GetValue(this) as RadMenuItem; if (hideMenuItem == null) { hideMenuItemFi.SetValue(this, new RadMenuItem(LayoutControlLocalizationProvider.CurrentProvider.GetLocalizedString(LayoutControlStringId.ContextMenuCustomize))); hideMenuItem = hideMenuItemFi.GetValue(this) as RadMenuItem; } hideMenuItem.Click += customizeItem_Click; RadDropDownMenu menu = typeof(RadLayoutControl).GetField("dropDownMenu", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this) as RadDropDownMenu; menu.Items.Add(hideMenuItem); } private void customizeItem_Click(object sender, EventArgs e) { if (this.AllowCustomize) { this.ShowCustomizeMenuDialog(); } } private void ShowCustomizeMenuDialog() { if (this.CustomizeDialog.Visible) { return; } this.ShowCustomDragOverlay(); this.CustomizeDialog.Owner = this.FindForm(); ThemeResolutionService.ApplyThemeToControlTree(this.CustomizeDialog, this.ThemeName); if (this.CustomizeDialog.Location == Point.Empty) { this.CustomizeDialog.Location = GetInitialCustomizeDialogLocation(); } this.CustomizeDialog.Show(); this.CustomizeDialog.RightToLeft = this.RightToLeft; } private void ShowCustomDragOverlay() { FieldInfo dragOverlayFi = typeof(RadLayoutControl).GetField("dragOverlay", BindingFlags.Instance | BindingFlags.NonPublic); LayoutControlDraggableOverlay dragOverlay = dragOverlayFi.GetValue(this) as LayoutControlDraggableOverlay; if (dragOverlay == null) { dragOverlayFi.SetValue(this, new CustomLayoutControlDraggableOverlay(this)); dragOverlay = dragOverlayFi.GetValue(this) as LayoutControlDraggableOverlay; } dragOverlay.ThemeName = this.ThemeName; dragOverlay.UpdatePreview(); dragOverlay.Dock = DockStyle.Fill; ((RadLayoutControlControlCollection)this.Controls).AddInternal(dragOverlay); dragOverlay.Visible = true; dragOverlay.BringToFront(); this.PerformLayout(); this.Refresh(); } } public class CustomLayoutControlDraggableOverlay : LayoutControlDraggableOverlay { private RadMenuItem hideMenuItem; public CustomLayoutControlDraggableOverlay(RadLayoutControl owner) : base(owner) { RadDropDownMenu contextMenu = typeof(LayoutControlDraggableOverlay).GetField("contextMenu", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this) as RadDropDownMenu; contextMenu.Items.Clear(); this.hideMenuItem = new RadMenuItem(LayoutControlLocalizationProvider.CurrentProvider.GetLocalizedString(LayoutControlStringId.ContextMenuHideItem)); this.hideMenuItem.Text = LayoutControlLocalizationProvider.CurrentProvider.GetLocalizedString(LayoutControlStringId.ContextMenuHideItem); this.hideMenuItem.Click += hideMenuItem_Click; contextMenu.Items.Add(hideMenuItem); contextMenu.DropDownOpening += ContextMenu_DropDownOpening; } private void ContextMenu_DropDownOpening(object sender, CancelEventArgs e) { if (this.SelectedItems.Count == 1 && this.SelectedItems[0].Name == "layoutControlItem4") { e.Cancel = true; } } private void hideMenuItem_Click(object sender, EventArgs e) { foreach (DraggableLayoutControlItem item in this.SelectedItems) { if (item.Name == "layoutControlItem4") { continue; } ((CustomRadLayoutControl)this.Owner).HideItem(item.AssociatedItem); } this.UpdatePreview(); } }
Workaround: handle the RadPropertyChanging and RadPropertyChanged public partial class RadForm1 : Telerik.WinControls.UI.RadForm { public RadForm1() { InitializeComponent(); this.layoutControlGroupItem1.RadPropertyChanging += LayoutControlGroupItem1_RadPropertyChanging; this.layoutControlGroupItem1.RadPropertyChanged += LayoutControlGroupItem1_RadPropertyChanged; } private void LayoutControlGroupItem1_RadPropertyChanged(object sender, RadPropertyChangedEventArgs e) { if (e.Property == LayoutControlGroupItem.IsExpandedProperty) { Console.WriteLine("IsExpanded Changed"); Console.WriteLine("Old Value: " + e.OldValue); Console.WriteLine("New Value: " + e.NewValue); } } }
Workaround: set a White back color to the control in the designer or use the attached custom theme
To reproduce: - Start the attached project. - Collapse and then expand the group. - The label should remain hidden. Workaround: bool labelVisiable = false; private void TxtIdNro_VisibleChanged(object sender, EventArgs e) { if (txtIdNro.Visible && !labelVisiable) { txtIdNro.Visible = false; } }
Please run the attached sample project and follow the steps in the document locate din the zipped folder. Workaround: this.radLayoutControl1.VerticalScrollbar.ValueChanged += VerticalScrollbar_ValueChanged; private void VerticalScrollbar_ValueChanged(object sender, EventArgs e) { this.Width += 1; this.Width -= 1; }
To reproduce: - Add layout control to a standard Form. - Make the form smaller so a scrollbar appears in the layout control. - There is an exception when you are scrolling. Workaround: Use RadForm instaed.
To reproduce: - Open the attached project. - Select the second tab and then the inner tabs. - The layout is not updated. Workaround: private void TabStrip_ItemSelected(object sender, RadPageViewItemSelectedEventArgs e) { LayoutControlTabStripElement el = sender as LayoutControlTabStripElement; foreach (LayoutControlTabStripItem item in el.Items) { var groupItem = item.LayoutGroupItem; groupItem.Visibility = Telerik.WinControls.ElementVisibility.Visible; groupItem.InvalidateMeasure(true); groupItem.InvalidateArrange(true); groupItem.UpdateLayout(); groupItem.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; } foreach (LayoutControlTabStripItem item in el.Items) { if (item == e.SelectedItem) { var groupItem = item.LayoutGroupItem; groupItem.Visibility = Telerik.WinControls.ElementVisibility.Visible; break; } } } // access event layoutControlTabbedGroup4.TabStrip.ItemSelected += TabStrip_ItemSelected;
Workaround: access the tabbed group and remove the group item manually this.layoutControlTabbedGroup1.ItemGroups.Remove(this.layoutControlGroupItem1); this.radLayoutControl1.HiddenItems.Add(this.layoutControlGroupItem1);
The attached video shows how this can be reproduced. Workaround: private void RadLayoutControl1_MouseWheel(object sender, MouseEventArgs e) { HandledMouseEventArgs ee = (HandledMouseEventArgs)e; ee.Handled = true; }
Currently you cannot add any controls to a panel which is already inside RadLayoutControl.