Use cases: 1. You have a MainDocumentContainer with Document windows in it, placed in one under the other. Setting the DockState of the bottom DocumentWindow to Hidden, and restoring it afterwards, should place the DocumentWindow at the same place, instead of merging it with the above one 2. Same layout as above, when the layout is saved and then restored, the DocumentWindow positions should be exactly as they were
this.radDock1.DockTabStripNeeded += this.RadDock1_DockTabStripNeeded;
private void RadDock1_DockTabStripNeeded(object sender, DockTabStripNeededEventArgs e)
{
if (e.DockType == DockType.ToolWindow)
{
e.Strip = new MyToolTabStrip();
}
else
{
e.Strip = new MyDocumentTabStrip();
}
}
public class MyToolTabStrip : ToolTabStrip
{
protected override bool ScaleChildren => false;
}
public class MyDocumentTabStrip : DocumentTabStrip
{
protected override bool ScaleChildren => false;
}
To reproduce: See attached video. Workaround: public Form1() { RadDockEvents.TabStripItemCreating += RadDockEvents_TabStripItemCreating; InitializeComponent(); radDock1.AutoHideAnimation = Telerik.WinControls.UI.Docking.AutoHideAnimateMode.None; } void RadDockEvents_TabStripItemCreating(object sender, TabStripItemCreatingEventArgs args) { if (args.AutoHide) { var currentScale = args.TabItem.DpiScaleFactor; Screen showScreen = Screen.FromControl(this); SizeF scale = NativeMethods.GetMonitorDpi(showScreen, NativeMethods.DpiType.Effective); if (scale != currentScale) { var font = args.TabItem.Font; var newFont = new Font(font.Name, font.Size * scale.Width, font.Style); args.TabItem.Font = newFont; } } } protected override void OnClosed(EventArgs e) { RadDockEvents.TabStripItemCreating -= RadDockEvents_TabStripItemCreating; base.OnClosed(e); }
If you drag a regular form to the top of the screen it will be maximized. This should work with the floating window as well.
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.
this.toolWindow1.TabStrip.MinimumSize = new Size(200,200)
To reproduce: radDock1.ElementTree.EnableApplicationThemeName = false; radDock1.ThemeName = "TelerikMetroBlue"; ThemeResolutionService.ApplicationThemeName = "Office2013Light"; Workaround: ThemeResolutionService.ApplyThemeToControlTree(this,"Office2013Light"); radDock1.ThemeName = "TelerikMetroBlue";
To reproduce: please run the attached sample project and follow the steps in the gif file. After some further testing you will notice that the tab items are re-positioned incorrectly when you click a certain tab. It jumps to another location. Workaround: set the MultiLineItemFitMode property to None and specify the DocumentWindow.TabStripItem.Row property in order to arrange the tabs as you wish.
Please use attached project and try the following: 1. Run the application and move toolWindow3 from right to the bottom panel. 2. Hide toolWindow3 by 'Toggle' menu item or just close it. 3. Save the layout pressing 'Save' menu item. 4. Close the application and run it again. 5. Restore layout using 'Init' menu item. 6. Press 'Toggle' menu item to show toolWindow3. Workaround: Make the window visible before loading the layout.
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.
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: - 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
To reproduce: Sub New() InitializeComponent() Me.WindowState = FormWindowState.Maximized Dim leftWindow As ToolWindow = New ToolWindow() leftWindow.Text = "Left Window" Me.RadDock1.DockWindow(leftWindow, DockPosition.Left) leftWindow.DockState = DockState.AutoHide End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load If Me.RadDock1.DockWindows.ToolWindows.First().ParentForm IsNot Nothing Then Me.RadDock1.DockWindows.ToolWindows.First().ParentForm.Show() End If End Sub Workaround: maximize the form after the auto-hide popup is shown: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load If Me.RadDock1.DockWindows.ToolWindows.First().ParentForm IsNot Nothing Then Me.RadDock1.DockWindows.ToolWindows.First().ParentForm.Show() End If Me.WindowState = FormWindowState.Maximized End Sub
To reproduce: run the application. On the first DocumentWindow there is a UserControl with a wizard. Pressing the Tab key will navigate the command buttons. On the second DocumentWindow there is a similar wizard which is NOT hosted in a UserControl. Workaround: Currently, you can override the ProcessDialogKey method of RadWizard and handle the Tab key where you can perform the desired logic, e.g. select a specific control: public class MyWizard : RadWizard { protected override bool ProcessDialogKey(Keys keyData) { if (keyData == Keys.Tab) { WizardPage page = this.SelectedPage; page.ContentArea.Controls[0].Focus(); return false; } return base.ProcessDialogKey(keyData); } }