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: - 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:
- 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;
}
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;
}
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;
To reproduce: - Create a new project and add a blank user control to it. - Add RadLayoutControl to the user control. - Add another control to the layout control. Workaround Use a form instead of user control. Then add the controls from the form at runtime.
To reproduce: - Add RadPageView with four pages to a form. - In the firs page add RadLayoutControl with some items in it. - Select the second page and try to add controls to it. Workaround: - Place the layout control in a separte user control and then add it to the main form.