UserControl within DocumentWindow not visible after LoadFromXml()

5 posts, 0 answers
  1. Sri
    Sri avatar
    5 posts
    Member since:
    Mar 2014

    Posted 15 May 2014 Link to this post

    I have a single DocumentWindow that I am using to host my own tab control to display a set of tabs.  Prior to calling the LoadFromXml() method to restore a docking layout, I can perform actions within my app that correctly adds tabs to my own tab control.  See attached image "Document Windows - Before Load Layout.jpg".  However, after I call "LoadFromXml()", my tab control disappears.  See attached image "Document Windows - After Load Layout.jpg".

    I can inspect the "Parent" property of my tab control, and it is still set to the "DocumentWindow", but my tab control does not show up in "DocumentWindow.Controls" property.  If I force adding my tab control back into the "Controls" list for the DocumentWindow, I still do not see my tab control on the screen.

    Can you offer a solution and best practices for how to restore my user controls within a DocumentWindow after a call to LoadFromXml()?

    Thank you.
  2. George
    Admin
    George avatar
    500 posts

    Posted 20 May 2014 Link to this post

    Hi Sri,

    Thank you for contacting us.

    With the latest release we addressed an issue which required clearing all windows from the aforementioned collection when loading the layout, so now there are no windows to match from, so no windows are reused, hence the missing controls, as brand new windows are being created during the load operation and they do not have any controls in them.

    However, we have discussed this case, and we found another way to address the issue, which required clearing the windows. We will change this in the next release of ours and this will bring back the old behavior (even though it is not quite correct, but this will avoid changes in the behavior). Until then, you can use the following RadDock implementation:
    class MyDock : RadDock
    {
        protected override void LoadFromXmlCore(System.Xml.XmlReader reader, bool oldXmlFormat)
        {
            //stop the base logic
            //base.LoadFromXmlCore(reader, oldXmlFormat);
       
            if (reader == null)
            {
                return;
            }
       
            this.ActiveWindow = null;
       
            FieldInfo prevActiveWindow = typeof(RadDock).GetField("prevActiveWindow", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField);
            prevActiveWindow.SetValue(this, null); //this.prevActiveWindow = null;
       
            FieldInfo attachedWindows = typeof(RadDock).GetField("attachedWindows", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            SortedList<string, DockWindow> _attachedWindows = attachedWindows.GetValue(this) as SortedList<string, DockWindow>;
            MethodInfo CleanAutoHideTabs = typeof(RadDock).GetMethod("CleanAutoHideTabs", System.Reflection.BindingFlags.NonPublic | BindingFlags.Instance);
            CleanAutoHideTabs.Invoke(this, new object[] { _attachedWindows.Values, true }); //this.CleanAutoHideTabs(this.attachedWindows.Values, true);
       
            MethodInfo ResetDesiredDockState = typeof(RadDock).GetMethod("ResetDesiredDockState", System.Reflection.BindingFlags.NonPublic | BindingFlags.Instance);
            ResetDesiredDockState.Invoke(this, null); //this.ResetDesiredDockState();
       
            MethodInfo OnLoadingFromXML = this.DocumentManager.GetType().GetMethod("OnLoadingFromXML", System.Reflection.BindingFlags.NonPublic | BindingFlags.Instance);
            OnLoadingFromXML.Invoke(this.DocumentManager, null); //this.DocumentManager.OnLoadingFromXML();
       
            if (oldXmlFormat)
            {
                this.BeginTransactionBlock(false);
       
                MethodInfo LoadFromOldXml = typeof(RadDock).GetMethod("LoadFromOldXml", System.Reflection.BindingFlags.NonPublic | BindingFlags.Instance);
                LoadFromOldXml.Invoke(this, new object[] {reader}); // this.LoadFromOldXml(reader);
       
                this.EndTransactionBlock();
            }
            else
            {
                MethodInfo LoadFromNewXml = typeof(RadDock).GetMethod("LoadFromNewXml", System.Reflection.BindingFlags.NonPublic |  BindingFlags.Instance);
                LoadFromNewXml.Invoke(this, new object[] { reader }); // this.LoadFromNewXml(reader);
            }
       
            this.EnsureInitialized();
            this.OnLoadedFromXml();
        }
       
        public override string ThemeClassName
        {
            get
            {
                return typeof(RadDock).FullName;
            }
        }
    }

    The issue is logged in our Feedback Portal and you can find the item here.

    Let me know if you have further questions.

    Regards,
    George
    Telerik
     
    Check out Telerik Analytics, the service which allows developers to discover app usage patterns, analyze user data, log exceptions, solve problems and profile application performance at run time. Watch the videos and start improving your app based on facts, not hunches.
     
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Alwin
    Alwin avatar
    12 posts
    Member since:
    May 2009

    Posted 21 May 2014 in reply to George Link to this post

    This must be a very bad joke...

    To which date is the fix terminated?
    Untill then it's better for us to disable this feature...

    best regards
    Alwin
  5. HowieD
    HowieD avatar
    8 posts
    Member since:
    Jun 2012

    Posted 22 May 2014 Link to this post

    What the hell is your QA Department doing???
    With every release there are new issues where we have to implement workarounds.
    In general it seems that you don't care anything about the problems that emerge on customers side.
    Unfortunately our product heavily relys on your controls as I would prefer to switch to an other vendor!
    Keep on providing issues then this day will come faster as expected!

    Best Regards
    HowieD
  6. George
    Admin
    George avatar
    500 posts

    Posted 26 May 2014 Link to this post

    Hello Guys,

    I am sorry to hear about your negative experience.

    Alwin, the issue at hand is resolved and will be released with Q2 2014 as you can see in the "Scheduled for" tab in the feedback item.

    As to Herbert's reply - we strive to provide as bug-free software as much as possible to our customers, however as we can see sometimes such issues slip through. Of course, in such cases we are addressing them as soon as possible.

    Do not hesitate to write back, should you have further questions.

    Regards,
    George
    Telerik
     
    Check out Telerik Analytics, the service which allows developers to discover app usage patterns, analyze user data, log exceptions, solve problems and profile application performance at run time. Watch the videos and start improving your app based on facts, not hunches.
     
Back to Top
UI for WinForms is Visual Studio 2017 Ready