Please refer to the attached sample project. Click the "show" button to open a new MDI child form. Then, press the "close" button. In the Output tab you will notice that the FormClosing/FormClosed events are fired twice. Workaround: use the RadDock's DockWindowClosing and DockWindowClosed events.
Currently tool windows cannot be re-sized proportionally in this scenario.
RadDock should support a MDI mode where the child mdi forms are displayed in the old fashioned way.
When custom controls that are containing SplitContainers and TableLayoutPanels are used in RadDock there is invalid resizing behaviour. The underlying controls are not properly resized when the entire form is resized as well. The issue exists only on Windows 7 x64 machines. Workaround: Use RadLayoutControl instead of the TableLayoutPanel.
To reproduce: Use the approach here: http://docs.telerik.com/devtools/winforms/dock/object-model/customizing-floating-windows Workaround: private void RadDock1_FloatingWindowCreated(object sender, Telerik.WinControls.UI.Docking.FloatingWindowEventArgs e) { e.Window = new MyWindow(radDock1); e.Window.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; } class MyWindow : FloatingWindow { public MyWindow(RadDock dock): base(dock) { } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.Style |= NativeMethods.WS_THICKFRAME; return cp; } } }
How to reproduce: check the attached project and video. Workaround: persist the auto-hidden windows separately public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radDock1.AutoHideWindowDisplaying += RadDock1_AutoHideWindowDisplaying; //Wworkaround this.radDock1.LoadedFromXml += RadDock1_LoadedFromXml; } private void RadDock1_LoadedFromXml(object sender, EventArgs e) { string res = File.ReadAllText(@"..\..\auto-hidden.txt"); foreach (DockWindow window in this.radDock1.GetWindows(typeof(ToolWindow), typeof(HostWindow))) { if (res.IndexOf(window.Name) != -1) { window.DockState = DockState.AutoHide; } } } private void RadDock1_AutoHideWindowDisplaying(object sender, Telerik.WinControls.UI.Docking.AutoHideWindowDisplayingEventArgs e) { } private void button1_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); foreach (DockWindow window in this.radDock1.GetWindows(typeof(ToolWindow), typeof(HostWindow))) { if (window.DockState == DockState.AutoHide) { sb.AppendLine(window.Name); } } File.WriteAllText(@"..\..\auto-hidden.txt", sb.ToString()); this.radDock1.SaveToXml(@"..\..\layout.xml"); } private void button2_Click(object sender, EventArgs e) { this.radDock1.LoadFromXml(@"..\..\layout.xml"); } }
How to reproduce: 1. Run the attached project 2. Float a tool window 3. Save layout 4. Close the application and start it again 5. Load the saved layout 6. Hide the floating tool window 7. Save layout 8. Close the application and start it again 9. Load layout Notice that the hidden tool window would be floating Workaround: Manually store the hidden tool windows and restore their state after your load the layout: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void radButton1_Click(object sender, EventArgs e) { this.radDock1.SaveToXml(@"..\..\layout.xml"); StringBuilder sb = new StringBuilder(); foreach (DockWindow window in this.radDock1.DockWindows.GetWindows(DockState.Hidden)) { if (window is ToolWindow) { sb.Append(window.Name); sb.Append(";"); } } File.WriteAllText(@"..\..\hidden.txt", sb.ToString()); } private void radButton2_Click(object sender, EventArgs e) { this.radDock1.LoadFromXml(@"..\..\layout.xml"); string[] windows = File.ReadAllText(@"..\..\hidden.txt").Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (var window in windows) { this.radDock1.GetWindow<ToolWindow>(window).Hide(); } } }
To reproduce: open the attached sample project. 1. Drag the documentwindow1 as floating 2. Select tool window 2 3. Select the floating documentwindow1. The ActiveWindowChanging event will be fired twice.
To reproduce: - Load a layout with a floating window in it. - The close button is disabled. Workaround: private void RadDock1_LoadedFromXml(object sender, EventArgs e) { foreach (FloatingWindow item in radDock1.FloatingWindows) { item.UpdateCloseButton(); } }
To reproduce: Scenario 1: ToolWindow window1 = new ToolWindow(); window1.Name = "window1"; this.radDock1.DockWindow(window1, DockPosition.Left); ToolWindow window2 = new ToolWindow(); window2.Name = "window2"; this.radDock1.DockWindow(window2, window1, DockPosition.Right); window1.TabStrip.SizeInfo.SizeMode = Telerik.WinControls.UI.Docking.SplitPanelSizeMode.Relative; window1.TabStrip.SizeInfo.RelativeRatio = new SizeF(0.7f, 0); The expected result is that "window1" takes 70% of the container hosting "window1" and "window2". Scenario 2: ToolWindow window1 = new ToolWindow(); window1.Name = "window1"; this.radDock1.DockWindow(window1, DockPosition.Left); DocumentWindow doc1 = new DocumentWindow(); this.radDock1.AddDocument(doc1, window1, DockPosition.Right); window1.TabStrip.SizeInfo.SizeMode = Telerik.WinControls.UI.Docking.SplitPanelSizeMode.Relative; window1.TabStrip.SizeInfo.RelativeRatio = new SizeF(0.7f, 0); The expected result is that "window1" takes 70% of the container hosting "window1" and the document window. Workaround: use the SplitPanelSizeMode.Absolute as below: ToolWindow window1 = new ToolWindow(); DocumentWindow doc1 = new DocumentWindow(); private void RadForm1_Load(object sender, EventArgs e) { window1.Name = "window1"; this.radDock1.DockWindow(window1, DockPosition.Left); this.radDock1.AddDocument(doc1, window1, DockPosition.Right); window1.TabStrip.SizeInfo.SizeMode = Telerik.WinControls.UI.Docking.SplitPanelSizeMode.Absolute; window1.TabStrip.SizeInfo.AbsoluteSize = new Size((int)(this.Size.Width * 0.7),0); this.radDock1.SizeChanged += radDock1_SizeChanged; } private void radDock1_SizeChanged(object sender, EventArgs e) { window1.TabStrip.SizeInfo.AbsoluteSize = new Size((int)(this.Size.Width * 0.7),0); }
To reproduce: - Add three panels to a document window, add some controls to the panels as well. - Dock the panels to Top, Bottom and Fill. - Restart Visual Studio and reopen the designer.
Workaround: FloatingWindow.FormElement.TitleBar.CloseButton.Enabled = True
To reproduce: - Add a panel to a form, dock it to fill the entire space. - Add RadDock to it, set its Dock property to fill. - Add a document window with a grid to it (the grid should fill the entire space). - Start the application and maximize the form. Workaround: - Remove the panel or use RadPanel instead. - Handle the SizeChanged event private void RadForm1_SizeChanged(object sender, EventArgs e) { var window = this.radDock1.ActiveWindow; this.radDock1.ActiveWindow = null; this.radDock1.ActiveWindow = window; }
Description: Add two MDI child forms. Activate one of the forms and focus the second textbox. After that select the second form. Then return to the first form and you will see that the textbox is not focused. The issue is observed only with Visual Basic.
To reproduce: - Add a form with two auto-hidden windows - one on the left and one on the right. - Drag one of the windows by just showing it (do not pin it) - The floating window will contain both tool windows, instead of just the dragged one. Workaround: Private Sub RadForm1_Load(sender As Object, e As EventArgs) Handles MyBase.Load RadDock1.DockWindow(ToolWindow2, DockPosition.Right) RadDock1.AutoHideWindows(New DockWindow() {ToolWindow2}, AutoHidePosition.Right) ToolWindow2.Tag = DockPosition.Right RadDock1.AutoHideWindow(ToolWindow1) ToolWindow1.Tag = DockPosition.Left End Sub Private Sub RadDock1_FloatingWindowCreated(sender As Object, e As FloatingWindowEventArgs) Handles RadDock1.FloatingWindowCreated For Each dw As DockWindow In CType(sender, RadDock).DockWindows If dw.Handle <> CType(sender, RadDock).ActiveWindow.Handle Then dw.DockState = dw.PreviousDockState RadDock1.AutoHideWindows(New DockWindow() {dw}, dw.Tag) End If Next End Sub
Please refer to the attached sample project and follow the steps illustrated on the gif file. Workaround: you can control which items to be closed: public RadForm1() { InitializeComponent(); ContextMenuService menuService = this.radDock1.GetService<ContextMenuService>(); menuService.ContextMenuDisplaying += menuService_ContextMenuDisplaying; } RadDockLocalizationProvider localizationProvider = RadDockLocalizationProvider.CurrentProvider; private void menuService_ContextMenuDisplaying(object sender, ContextMenuDisplayingEventArgs e) { foreach (RadItem item in e.MenuItems) { if (item.Text == localizationProvider.GetLocalizedString(RadDockStringId.ContextMenuCloseAll)) { item.Click += item_ClickContextMenuCloseAll; } else if (item.Text == localizationProvider.GetLocalizedString(RadDockStringId.ContextMenuCloseAllButThis)) { item.Click += item_ClickContextMenuCloseAllButThis; } } } private void item_ClickContextMenuCloseAllButThis(object sender, EventArgs e) { foreach (DockWindow dw in this.radDock1.DockWindows) { if (dw == this.radDock1.ActiveWindow) { continue; } dw.CloseAction = DockWindowCloseAction.Hide; dw.Close(); } } private void item_ClickContextMenuCloseAll(object sender, EventArgs e) { foreach (DockWindow dw in this.radDock1.DockWindows) { dw.CloseAction = DockWindowCloseAction.Hide; dw.Close(); } }
To reproduce: - Add two tool windows and auto hide them, one on the left and on the right - Then call the AutoHideWindow method like this (ToolWindow1 should be on left side): RadDock1.AutoHideWindow(ToolWindow1) - You will notice that the second windows is moved on the left. Workaround: Use the DockState property instead of the method.
To reproduce: - Add several dock windows and hide some of them. - Save the layout. - Load the layout, the windows are not hidden Workaround: string strLayout = File.ReadAllText(@"..\..\layout.xml"); foreach (DocumentWindow dw in radDock1.DockWindows.DocumentWindows) { if (strLayout.IndexOf("DesiredDockState=\"Hidden\" Name=\"" + dw.Name + "\"") != -1 && dw.DockState != DockState.Hidden) { dw.DockState = DockState.Hidden; } }
To reproduce: - Add a document window uppopn a button click. Put the button inside a tool window. Workaround: Use ActiveWindowChanged event.
To reproduce: radDock1.ElementTree.EnableApplicationThemeName = false; radDock1.ThemeName = "TelerikMetroBlue"; ThemeResolutionService.ApplicationThemeName = "Office2013Light"; Workaround: ThemeResolutionService.ApplyThemeToControlTree(this,"Office2013Light"); radDock1.ThemeName = "TelerikMetroBlue";