Approved
Last Updated: 20 Nov 2017 12:49 by ADMIN
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;
}
Completed
Last Updated: 11 Apr 2019 14:50 by Dimitar
Release R2 2019 (LIB 2019.1.415)
Use attached to reproduce.

Tested on Windows 10 (1607 and 1703)

Workaround:

RadControl.EnableDpiScaling = False

Completed
Last Updated: 07 Dec 2017 15:00 by ADMIN
Use the attached project to reproduce.

Workaround:
 radDock1.DocumentManager.BoldActiveDocument = false;
Declined
Last Updated: 10 Oct 2018 09:02 by ADMIN
To reproduce:
- Set the font of the tool window:
  ((ToolTabStrip)this.toolWindow1.TabStrip).CaptionElement.Font = font1;
- Make the tool window floating and then dock it again.
- The font is not preserved.

Workaround:
Set the font in the DockStateChanged event. 
Completed
Last Updated: 22 Jan 2018 13:45 by Dimitar
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;
            }
        }
Approved
Last Updated: 20 Nov 2017 15:27 by ADMIN
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);
 
    }
}
Approved
Last Updated: 19 Apr 2018 13:49 by ADMIN
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.
Completed
Last Updated: 28 Aug 2017 10:08 by ADMIN
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;
    }
}

Approved
Last Updated: 15 Aug 2017 10:09 by ADMIN
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.
Approved
Last Updated: 19 Jun 2017 11:27 by ADMIN
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");
    }
}
Completed
Last Updated: 15 Aug 2017 11:03 by ADMIN
To reproduce:
- Auto-hide some windows to the left.
- Save the layout 
- Load the layout
- The auto-hide popup is shown. 
Completed
Last Updated: 15 Aug 2017 10:54 by ADMIN
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.
 
Completed
Last Updated: 19 Jun 2017 12:59 by ADMIN
ADMIN
Created by: Dimitar
Comments: 2
Category: Dock
Type: Bug Report
5
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;
        }
    }
}
Approved
Last Updated: 19 Jun 2017 10:57 by ADMIN
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();
        }
    }
}
Approved
Last Updated: 19 Jun 2017 10:56 by ADMIN
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.
Completed
Last Updated: 15 Aug 2017 10:20 by ADMIN
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.
Approved
Last Updated: 27 Dec 2016 12:10 by ADMIN
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);
}
Completed
Last Updated: 06 Jan 2017 09:14 by ADMIN
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();
    }
}

Completed
Last Updated: 10 Oct 2016 07:47 by lan
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. 
Completed
Last Updated: 04 Jun 2019 11:04 by ADMIN
Use the attached project to reproduce.

Workaround:
private void RadForm1_SizeChanged(object sender, EventArgs e)
{
    toolWindow1.EnsureVisible();
}