Use attached project to reproduce. Workaround: https://docs.telerik.com/devtools/winforms/dock/object-model/customizing-tabstrip-items#documenttabstrip-multi-line-row-layout-with-a-custom-tab-shape
To reproduce: ThemeResolutionService.ApplicationThemeName = "FluentDark"; this.documentTabStrip1.TabStripAlignment = Telerik.WinControls.UI.TabStripAlignment.Left; this.documentTabStrip1.TabStripTextOrientation = Telerik.WinControls.UI.TabStripTextOrientation.Vertical; Workaround: this.documentTabStrip1.TabStripElement.ItemBorderAndFillOrientation = Telerik.WinControls.UI.PageViewContentOrientation.Horizontal;
The expected behavior should be similar to Visual Studio, once a maximized floating window starts being dragged it should go to a normal state so that the window under it is visible. How to reproduce: just maximize a floating window, then start dragging it from the title bar, the docking guides will appear which do not help much since the window is still maximized. Workaround: handle the Starting event of the DragDropService and change the WindowState of the window public partial class Form1 : Form { public Form1() { InitializeComponent(); DragDropService service = this.radDock1.GetService<DragDropService>(); service.Starting += Service_Starting; } private void Service_Starting(object sender, StateServiceStartingEventArgs e) { FloatingWindow fw = e.Context as FloatingWindow; if (fw != null && fw.WindowState == FormWindowState.Maximized) { fw.WindowState = FormWindowState.Normal; fw.Location = new Point(Cursor.Position.X - fw.Size.Width / 2, Cursor.Position.Y); } } }
When a document tab is already current, if the user clicks and holds the mouse button on the this tab label, the sibling tab is brought to the front and overlays it visually, so the corners of tab2 obscure the edges of tab1.
Use attached to reproduce. Tested on Windows 10 (1607 and 1703) Workaround: RadControl.EnableDpiScaling = False
Use the attached project to reproduce. Workaround: radDock1.DocumentManager.BoldActiveDocument = false;
Workaround: ContextMenuService menuService = this.radDock1.GetService<ContextMenuService>(); menuService.ContextMenuDisplaying += menuService_ContextMenuDisplaying; private void menuService_ContextMenuDisplaying(object sender, ContextMenuDisplayingEventArgs e) { foreach (RadMenuItem listMenuItem in e.MenuItems) { TextPrimitive textPrimitive = listMenuItem.Layout.TextPanel.Children[0] as TextPrimitive; textPrimitive.UseMnemonic = false; } }
How to reproduce: try resizing a too window using its splitter Workaround: create a custom RadDock using special layout strategy public class MyRadDock : RadDock { public override string ThemeClassName { get { return typeof(RadDock).FullName; } } protected override SplitContainerLayoutStrategy CreateLayoutStrategy() { MySplitContainerLayoutStrategy strategy = null; if (this.LayoutStrategyType != null) { try { strategy = Activator.CreateInstance(this.LayoutStrategyType) as MySplitContainerLayoutStrategy; } catch { strategy = null; } } if (strategy == null) { strategy = new MySplitContainerLayoutStrategy(); } strategy.RootContainerType = typeof(RadDock); return strategy; } } public class MySplitContainerLayoutStrategy : SplitContainerLayoutStrategy { protected override void Measure() { SplitContainerLayoutInfo layoutInfo = (SplitContainerLayoutInfo)typeof(SplitContainerLayoutStrategy).GetField("layoutInfo", BindingFlags.Instance | BindingFlags.NonPublic). GetValue(this); SplitPanel fillPanel = (SplitPanel)typeof(SplitContainerLayoutInfo).GetField("fillPanel", BindingFlags.Instance | BindingFlags.NonPublic). GetValue(layoutInfo); if (fillPanel == null) { base.Measure(); } this.MeasureWithFillPanel(); typeof(SplitContainerLayoutStrategy).GetMethod("ClampMeasuredLength", BindingFlags.Instance | BindingFlags.NonPublic). Invoke(this, new object[] { }); } private void MeasureWithFillPanel() { FieldInfo layoutInfoFi = typeof(SplitContainerLayoutStrategy).GetField("layoutInfo", BindingFlags.Instance | BindingFlags.NonPublic); SplitContainerLayoutInfo layoutInfo = (SplitContainerLayoutInfo)layoutInfoFi.GetValue(this); int availableLength = (int)typeof(SplitContainerLayoutInfo).GetField("availableLength", BindingFlags.Instance | BindingFlags.NonPublic). GetValue(layoutInfo); int remaining = availableLength; SplitPanel panel; //calculate the desired size of all non-fill panels int desiredNonFillLength = 0; List<SplitPanel> layoutTargets = (List<SplitPanel>)typeof(SplitContainerLayoutInfo).GetField("layoutTargets", BindingFlags.Instance | BindingFlags.NonPublic). GetValue(layoutInfo); SplitPanel fillPanel = (SplitPanel)typeof(SplitContainerLayoutInfo).GetField("fillPanel", BindingFlags.Instance | BindingFlags.NonPublic). GetValue(layoutInfo); int count = layoutTargets.Count; for (int i = 0; i < count; i++) { panel = layoutTargets[i]; if (panel == fillPanel) { continue; } desiredNonFillLength += this.GetLength(panel.SizeInfo.AbsoluteSize); } SplitPanelSizeInfo fillInfo = fillPanel.SizeInfo; int totalSplitterLength = (int)typeof(SplitContainerLayoutInfo).GetField("totalSplitterLength", BindingFlags.Instance | BindingFlags.NonPublic). GetValue(layoutInfo); int layoutableLength = availableLength - totalSplitterLength; int correction = 0; int totalMinLength = (int)typeof(SplitContainerLayoutInfo).GetField("totalMinLength", BindingFlags.Instance | BindingFlags.NonPublic). GetValue(layoutInfo); int desiredFillLength = totalMinLength; if (desiredNonFillLength + desiredFillLength > layoutableLength) { correction = (desiredNonFillLength + desiredFillLength) - layoutableLength; } int remainingCorrection = correction; for (int i = 0; i < layoutTargets.Count; i++) { panel = layoutTargets[i]; if (panel == fillPanel) { continue; } int length = this.GetLength(TelerikDpiHelper.ScaleSize(panel.SizeInfo.AbsoluteSize, new SizeF(1f / panel.SplitPanelElement.DpiScaleFactor.Width, 1f / panel.SplitPanelElement.DpiScaleFactor.Height))); if (remainingCorrection > 0 && panel.SizeInfo.SizeMode != SplitPanelSizeMode.Absolute) { float factor = (float)length / desiredNonFillLength; int panelCorrection = Math.Max(1, (int)(factor * correction)); remainingCorrection -= panelCorrection; length -= panelCorrection; } panel.SizeInfo.MeasuredLength = length; int splitterLength = (int)typeof(SplitContainerLayoutInfo).GetField("splitterLength", BindingFlags.Instance | BindingFlags.NonPublic). GetValue(layoutInfo); remaining -= (panel.SizeInfo.MeasuredLength + splitterLength); } fillPanel.SizeInfo.MeasuredLength = remaining; } }
To reproduce: - Auto-hide some windows to the left. - Save the layout - Load the layout - The auto-hide popup is shown.
Please refer to the attached sample project and follow the steps in the gif file. The issue appears when the ToolWindow DockState is set to auto-hide for the firs time as well.
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; } } }
To reproduce: - Set the DPI scaling to 150% - Add document window at runtime, their text property should be bound to the TextProperty of an underlying custom control. - This works fine with 100% Workaround: Explicitly update the window text prior adding it to the RadDock.
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: - 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.
Use the attached project to reproduce. Workaround: private void RadForm1_SizeChanged(object sender, EventArgs e) { toolWindow1.EnsureVisible(); }
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; }
This request concerns adding a state for the buttons in the ToolWindow caption, which will allow different theming for the buttons, when the window is active and inactive.
Steps to reproduce: 1. Open the form at design time 2. Add a RadDock 3. Add a MS Panel 4. Put the RadDock inside the panel 5. Dock the Panel to Fill, dock RadDock to Fill as well. 6. Open RadDock's Advanced Layout Designer 7. Add two ToolWindows to the left and redock them in order to share one common container. 8. Hide the ToolWindows by unchecking the check-boxes in the Advanced Layout Designer and save the changes 9. Add a RadPanel (Dock=Fill) to the active ToolWindow. 10. Add a RadGridView (Anchor = Top, Left, Right, Bottom ), a left RadButton (Anchor = Bottom, Left) and a right RadButton (Anchor = Bottom, Right)to the panel. 11. Save thfs in the designer. Select the RadPanel with the grid and the buttons and click Copy. 12. Select the other ToolWindow and paste. 13. Save the form. Close the designer and reopen it again. You will notice that the pasted panel is not as expected. The attached video (drag and drop over the browser to play it) illustrates better the performed steps. Workaround: do not place the RadDock inside a MS Panel. RadDock is supposed to be used as a main container in a form.
To reproduce: - Add several tool windows to RadDock. - Make a window floating and then dock it back. - Hide all windows and then save the layout. - Close the application. - Start the application and load the saved layout. - Show all windows again.