Completed
Last Updated: 18 Feb 2015 14:57 by ADMIN
Currently, it is not possible to add any RadElement to a TabStripItem in DocumentTabStrip.

Resolution: 
Use the static class RadDockEvents to subscribe to events before InitializeComponent
Completed
Last Updated: 25 Mar 2015 15:34 by ADMIN
ADMIN
Created by: Alexander
Comments: 0
Category: Dock
Type: Feature Request
3
Would be useful to have the option to create the tab close button theme which depends on the states of the button's containing tab.
Completed
Last Updated: 15 Jan 2015 16:57 by ADMIN
ADMIN
Created by: Alexander
Comments: 0
Category: Dock
Type: Bug Report
3
Hidden HostWindows are not loaded correctly when the load operation is performed twice.
Completed
Last Updated: 06 Feb 2015 11:43 by ADMIN
FIX. RadDock - with two nested docks, setting the DocumentTabsAlignment of the other dock automatically sets the same on the inner one and this cannot be changed. Once you change it and reload the design time, its setting is being reset.

To reproduce 
- add RadDock with couple DocumenWindows in it
- add second RadDock with coupld DocumentWindows in it, in one of the windows of the first dock
- set Raddock2 DoumentTabsAlignment to top
- set DocumentTabStrip2 TabStripAlignment also to top or default
- drag a radbutton into documentwindow3 and double click it, to get a click event
- go into code view and remove the created event manually
- change back to form view. the alignment in DocumentTabStrip2 has been automatically changed to bottom
Completed
Last Updated: 15 Oct 2013 03:37 by ADMIN
To reproduce:
- Add 2 DockWindows and dock it Add about 10 controls in one of the windows. AutoHide them and show them one after another, you will notice that the old one is visible somewhere in the middle of the animation.
- Also you will notice that AutoHideWindowDisplayed and AutoHideWindowDisplaying events are fired twice.
Completed
Last Updated: 15 Jan 2015 16:41 by ADMIN
1. Create a new project with RadDock and add 5 tool windows.
2. Dock all tool windows to bottom.
3. Reset the order of the tool windows to not be 1-5
4. Set the group to auto-hide
5. Save dashboard layout
6. Load dashboard layout
Completed
Last Updated: 16 Jan 2015 14:16 by ADMIN
1. Create a project with RadDock.
2. Add several tool windows.
3. Run the project.
4. Auto hide all tool windows at the bottom.
5. Close the last tool window.
6. Save the layout.
7. Load the layout.
Completed
Last Updated: 06 Apr 2015 13:55 by ADMIN
This feature request refers to introducing a new ToolWindow property which will allow setting individually text to the ToolWindow's Caption and Tab.
Completed
Last Updated: 20 Oct 2014 12:20 by ADMIN
The DocumentTabStrip raises the SelectedIndexChanging event twice
Completed
Last Updated: 22 Jul 2015 11:00 by ADMIN
ADMIN
Created by: Peter
Comments: 0
Category: Dock
Type: Bug Report
3
Dock windows should keep its icon and image that is set for them in a previous state, no matter their form, tabbed, docked,
Completed
Last Updated: 10 Nov 2014 07:59 by ADMIN
These are the steps to reproduce the bug:

1. Start dragging a docked window tab (but don't leave the tab bounds for now).
2. While still holding the left mouse button, click the right mouse button to let the context menu appear.
3. Now drag the tab outside the tab bar until the window gets undocked (for example to the blue region above the docked windows).
4. Finish dragging by releasing the left mouse button.
5. Move the mouse cursor over the title bar of another docked window -> the window is undocked without interacting with it and will stick to the cursor until you click the mouse button to release it.

Workaround:
   bool flag = false;
        public Form1()
        {
            InitializeComponent();
            
            ContextMenuService menuService = this.radDock1.GetService<ContextMenuService>();
            menuService.ContextMenuDisplaying += menuService_ContextMenuDisplaying;

            DragDropService service = this.radDock1.GetService<DragDropService>();
            service.Starting += service_Starting;
        }

        void service_Starting(object sender, StateServiceStartingEventArgs e)
        {
            e.Cancel = flag;
            flag = false;
        }

        void menuService_ContextMenuDisplaying(object sender, ContextMenuDisplayingEventArgs e)
        {
            flag = true;
        }
Completed
Last Updated: 17 Mar 2015 14:25 by ADMIN
To reproduce:
- Add 2 RadFoms to a raddock in mdi mode.
- Dock the windows by using the left or right docking guide in the center.
- You will notice that the behavior is the same as like using the left or right side guides.

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: 30 Apr 2019 07:59 by ADMIN
Release R2 2019
How to reproduce: check the attached project and video

Workaround:
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
    public RadForm1()
    {
        InitializeComponent();
        radDock1.FloatingWindowCreated += RadDock1_FloatingWindowCreated;
    }

    private void RadDock1_FloatingWindowCreated(object sender, Telerik.WinControls.UI.Docking.FloatingWindowEventArgs e)
    {
        e.Window = new MyWindow(this.radDock1);
    }
}

public class MyWindow : FloatingWindow
{
    SizeF oldDpi = new SizeF(1, 1);

    public MyWindow(RadDock dockManager) : base (dockManager)
    { }
    protected override void HandleDpiChanged()
    {
        
        base.HandleDpiChanged();
        SizeF descale = new SizeF(1f / this.FormElement.DpiScaleFactor.Width, 1f / this.FormElement.DpiScaleFactor.Height);
        this.Scale(descale);
        var dpi = NativeMethods.GetMonitorDpi(Screen.FromRectangle(this.Bounds), NativeMethods.DpiType.Effective);
        if (oldDpi != dpi)
        {
            SizeF sz = new SizeF(dpi.Width / oldDpi.Width, dpi.Height / oldDpi.Height);

            this.Scale(dpi);
        }

        oldDpi = dpi;
    }
}
Approved
Last Updated: 20 Mar 2019 09:44 by ADMIN
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.
Completed
Last Updated: 20 Mar 2018 12:53 by Dimitar
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);
        }
    }
}

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;
            }
        }
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. 
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: 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;
    }
}