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;
}
Use the following code snippet:
ToolTabStrip tabStrip = this.toolWindow1.TabStrip as ToolTabStrip;
this.toolWindow1.Text = "<html><span style=\"font-family:Segoe UI;font-size:8.25;\"><b>Hello</b></span><span" +
" style=\"font-family:Segoe UI;font-size:8.25;\">Woooooooooooooooooorld</span></html>";
TextPrimitive text = tabStrip.CaptionElement.FindDescendant<TextPrimitive>();
text.ClipDrawing = true;
text.StretchHorizontally = false;
text.DisableHTMLRendering = false;
text.AutoEllipsis = 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); }
To reproduce:
1. Create a floating window
2. Try to drop another window into the floating window
3. The window is successfully docked into the floating window, but DockStateChanged event does not fire.
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.
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); } }
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.
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.
The attached videos demonstrate the present behavior and the desired one How to reproduce: public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radDock1.EnableFloatingWindowSnapping = true; DragDropService svc = this.radDock1.GetService<DragDropService>(); svc.DragDropMode = DragDropMode.Preview; } }
This property should be inherited by all tool, document, floating and autohide windows.
To reproduce: Open the attached project and press Ctrl+ Tab in the first text box. Since the textboxes are accepting the Tab, Ctrl + Tab should move to the other control. Workaround // RadTextBox private void TextBoxItem_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if ((e.KeyData & Keys.Tab) == Keys.Tab && (e.KeyData & Keys.Control) == Keys.Control) { e.IsInputKey = true; var item = sender as RadTextBoxItem; this.SelectNextControl(item.HostedControl, true, true, true, true); } } //RadTextBoxControl private void RadTextBoxControl1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if ((e.KeyData & Keys.Tab) == Keys.Tab && (e.KeyData & Keys.Control) == Keys.Control) { e.IsInputKey = true; this.SelectNextControl(sender as RadTextBoxControl, true, true, true, true); } }
Workrarund: If possible create tool-windows with added user controls public static ContentUserControl CreateContentUserControl(RadDock dock) { ContentUserControl uc = new ContentUserControl(); if (dock != null) { ToolWindow hostWindow = new ToolWindow("ContentUserControl"); hostWindow.Controls.Add(uc); hostWindow.Name = uc.Name; dock.FloatWindow(hostWindow); } return uc; }
To reproduce: please refer to the attached sample project and follow the steps illustrated in the gif file. Workaround: after loading the layout, set the MaximumSize for the FloatingWindow: public RadForm1() { InitializeComponent(); this.radDock1.FloatingWindowCreated += radDock1_FloatingWindowCreated; } Size lastSize = Size.Empty; private void radDock1_FloatingWindowCreated(object sender, Telerik.WinControls.UI.Docking.FloatingWindowEventArgs e) { lastSize= e.Window.Size; } private void button1_Click(object sender, EventArgs e) { int reps; if (!int.TryParse(radMaskedEditBox1.Text, out reps)) { MessageBox.Show(this, "Enter a valid number for repititions."); return; } using (var dockLayout = new MemoryStream()) { for (int i = 0; i < reps; i++) { dockLayout.SetLength(0); radDock1.SaveToXml(dockLayout); radDock1.LoadFromXml(dockLayout); foreach (Telerik.WinControls.UI.Docking.FloatingWindow fw in this.radDock1.ActiveFloatingWindows) { fw.MaximumSize = lastSize; } } } }
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.
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.
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"); } }