<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication in .NET Forum</title>
    <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623630#M92</link>
    <description>&lt;P&gt;How to deal with theme-dependent images depends on how your ribbon content is defined (e.g., via XAML or code), but there's no built-in way to automatically switch images when the theme changes.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This shows how to detect color theme changes without the overhead of watching system variables (which is not recommended):&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;using Autodesk.AutoCAD.Internal;

public static class ActiveTheme
{
   static ActiveTheme()
   {
      ActiveThemeColor.Instance().ColorThemeChanged += colorThemeChanged;
   }

   private static void colorThemeChanged(object sender, EventArgs e)
   {
      // TODO: Handle color theme change as required.
   }

   // Get current theme and use IsDark property:
   
   public static PaletteTheme CurrentTheme =&amp;gt;
      ThemeManager.PaletteSettings.CurrentTheme;
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Sat, 10 May 2025 20:32:05 GMT</pubDate>
    <dc:creator>ActivistInvestor</dc:creator>
    <dc:date>2025-05-10T20:32:05Z</dc:date>
    <item>
      <title>OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13620590#M83</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm new in &lt;STRONG&gt;AutoCAD&lt;/STRONG&gt; development but I have a lot of experience in &lt;STRONG&gt;Revit API&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In &lt;STRONG&gt;Revit&lt;/STRONG&gt; the &lt;STRONG&gt;IExternalApplication.OnStartup&amp;nbsp;&lt;/STRONG&gt;is the best place to register a &lt;STRONG&gt;RibbonPanel&lt;/STRONG&gt; when the application start.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In &lt;STRONG&gt;AutoCAD&lt;/STRONG&gt; the &lt;STRONG&gt;IExtensionApplication.Initialize&lt;/STRONG&gt; looks similar but the &lt;STRONG&gt;ComponentManager.Ribbon &lt;/STRONG&gt;is null at that moment.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I see some users using &lt;A href="https://forums.autodesk.com/t5/net-forum/autoloader-fails-with-iextensionapplication/m-p/10302677#M68966" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Application.Idle&lt;/STRONG&gt;&lt;/A&gt; to register the &lt;STRONG&gt;Ribbons&lt;/STRONG&gt; as a solution, and found a different approach that looks better in my opinion that use the &lt;A href="https://github.com/MjMthimunye/Button-Tab-Civil3D-Addin-Template/blob/master/ButtonTabCivil/Application.cs" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;ComponentManager.ItemInitialized&lt;/STRONG&gt;&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I create an abstract class to help with OnStartup/OnShutdown the Ribbon.&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public abstract class ExtensionApplication : IExtensionApplication
{
    public virtual void Initialize()
    {
        ComponentManager.ItemInitialized += ComponentManager_ItemInitialized;
        if (ComponentManager.Ribbon is not null) ComponentManager_ItemInitialized(null, null);
        Application.QuitWillStart += Application_QuitWillStart;
    }
    public virtual void Terminate()
    {
        ComponentManager.ItemInitialized -= ComponentManager_ItemInitialized;
        Application.QuitWillStart -= Application_QuitWillStart;
    }
    private void ComponentManager_ItemInitialized(object sender, RibbonItemEventArgs e)
    {
        ComponentManager.ItemInitialized -= ComponentManager_ItemInitialized;
        OnStartup(ComponentManager.Ribbon);
    }
    private void Application_QuitWillStart(object sender, EventArgs e)
    {
        Application.QuitWillStart -= Application_QuitWillStart;
        OnShutdown(ComponentManager.Ribbon);
    }
    public abstract void OnStartup(RibbonControl ribbonControl);
    public abstract void OnShutdown(RibbonControl ribbonControl);
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And my main application would be something like:&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public class App : ExtensionApplication
{
    public override void OnStartup(RibbonControl ribbonControl)
    {
        ribbonControl.CreateOrSelectPanel("PanelName", "TabName");
    }
    public override void OnShutdown(RibbonControl ribbonControl)
    {
            
    }
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If someone with more experience with &lt;STRONG&gt;AutoCAD API&lt;/STRONG&gt; could judge my approach, any improvement would be appreciate.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;See yaa&lt;/P&gt;</description>
      <pubDate>Thu, 08 May 2025 18:15:39 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13620590#M83</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2025-05-08T18:15:39Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13621052#M84</link>
      <description>&lt;P&gt;Your code is well-written, but its reliance on ComponentManager events is flawed.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;That's because the ItemInitialized event fires for &lt;EM&gt;every RibbonItem&lt;/EM&gt;, including those on the QAT (Quick Access Toolbar), and on the Application menu that drops down when you click on the 'big A' in the upper-left corner of the app window.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;IOW, because not all RibbonItems are on the ribbon, that event fires even if the user has the ribbon turned off, and it is never created during the life of the application.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There are several issues related to managing application-provided ribbon content. You have to wait until the ribbon is created at startup. To do that, you handle an event that fires when the ribbon is created, which may not necessarily be when the application starts, because the user may have the ribbon turned off, and then at some point, issues the RIBBON command to display it, so if the ribbon does not exist when your startup code runs, then the &lt;A href="https://help.autodesk.com/view/OARX/2024/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Ribbon_RibbonServices_RibbonPaletteSetCreated" target="_blank" rel="noopener"&gt;RibbonServices.RibbonPaletteSetCreated&lt;/A&gt; event needs to be handled.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Another issue is that you must add your custom ribbon content not only when you first encounter the Ribbon after startup, but also after the user issues the CUI, MENULOAD, MENUUNLOAD, and CUSTOMIZE commands. That's because when that happens, the entire ribbon contents is discarded and reloaded to account for whatever changes were made to loaded CUI files and so forth, which causes anything you've added to it to be removed. So, we have another event (&lt;A href="https://help.autodesk.com/view/OARX/2025/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Ribbon_RibbonPaletteSet_WorkspaceLoaded" target="_blank" rel="noopener"&gt;RibbonPaletteSet.WorkspaceLoaded&lt;/A&gt;) that must be handled to be notified about that, and in the handler for that event you must add all of your ribbon content to the ribbon again. So, the problem is actually a bit more complicated than it might at first seem looking at it from afar.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Because I've been through all of this, I built a reusable solution that allows me to deal with the problem very easily, and have shared it so others can also avoid having to deal with each of the various issues I mention about above.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You can have a look at the &lt;A href="https://github.com/ActivistInvestor/AcMgdLib/blob/main/AcMgdLib/Ribbon/RibbonEventManager.cs" target="_blank" rel="noopener"&gt;RibbonEventManager class&lt;/A&gt;, along with&amp;nbsp;&lt;A href="https://github.com/ActivistInvestor/AcMgdLib/blob/main/AcMgdLib/Ribbon/Examples/MinimalRibbonEventManagerExample.cs" target="_blank" rel="noopener"&gt;this example&lt;/A&gt; showing how it helps to arrive at a simplified solution. You can either adopt RibbonEventManager, or just use it as a guide to creating your own solution. The comments in the code files go even further in-depth on solving all the problems related to managing custom ribbon content.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You also might want to test the code you posted, as the Terminate() method and the QuitWillStart event are redundant. You should use QuitWillStart to do any finalization because Terminate() isn't called until the process exits, which is too late to do most things, including access APIs. If your code handles QuitWillStart, there is no need or purpose to acting in the Terminate() method, and in fact, it looks like you are executing your shutdown code twice.&lt;/P&gt;</description>
      <pubDate>Fri, 09 May 2025 17:25:44 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13621052#M84</guid>
      <dc:creator>ActivistInvestor</dc:creator>
      <dc:date>2025-05-09T17:25:44Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13621951#M85</link>
      <description>&lt;P&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt;thanks for the great explanation.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I didn't know that is possible to remove the &lt;STRONG&gt;RIBBON&lt;/STRONG&gt; in AutoCAD, and the &lt;STRONG&gt;MENULOAD&lt;/STRONG&gt; force the Ribbon the recreate. AutoCAD is weird. &lt;span class="lia-unicode-emoji" title=":upside_down_face:"&gt;🙃&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;About the &lt;STRONG&gt;ComponentManager.ItemInitialized&lt;/STRONG&gt; I'm using just to replace the &lt;STRONG&gt;Idle&lt;/STRONG&gt;, at least looks like is a good time to know the &lt;STRONG&gt;RibbonControl&lt;/STRONG&gt; is available to receive my custom Ribbon.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The &lt;STRONG&gt;&lt;A href="https://help.autodesk.com/view/OARX/2024/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Ribbon_RibbonServices_RibbonPaletteSetCreated" target="_blank" rel="noopener nofollow noreferrer"&gt;RibbonServices.RibbonPaletteSetCreated&lt;/A&gt;&lt;/STRONG&gt; trigger when the &lt;STRONG&gt;RibbonControl&lt;/STRONG&gt; is available, but does not work if you try to add Ribbons when the event trigger.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And If I add the &lt;STRONG&gt;ComponentManager.ItemInitialized&lt;/STRONG&gt; inside the &lt;STRONG&gt;&lt;A href="https://help.autodesk.com/view/OARX/2024/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Ribbon_RibbonServices_RibbonPaletteSetCreated" target="_blank" rel="noopener nofollow noreferrer"&gt;RibbonServices.RibbonPaletteSetCreated&lt;/A&gt;&lt;/STRONG&gt; I know the next time &lt;STRONG&gt;ItemInitialized&lt;/STRONG&gt; trigger my custom Ribbon show like expected.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And with the &lt;STRONG&gt;RibbonPaletteSet.WorkspaceLoaded&lt;/STRONG&gt; and &lt;STRONG&gt;RibbonPaletteSet.WorkspaceUnloading&lt;/STRONG&gt; to trigger my &lt;STRONG&gt;OnStartup&lt;/STRONG&gt; and &lt;STRONG&gt;OnShutdown&amp;nbsp;&lt;/STRONG&gt;to fix the MENULOAD problem.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So I don't need to use the &lt;STRONG&gt;Idle&lt;/STRONG&gt; event in any time, that my goal. &lt;span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:"&gt;😊&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is the full abstract &lt;A href="https://gist.github.com/ricaun/4d425cd2853c58dc84cbef1c2e2484e3#file-extensionapplication-cs" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;ExtensionApplication.cs&amp;nbsp;&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;A href="https://gist.github.com/ricaun/4d425cd2853c58dc84cbef1c2e2484e3" target="_blank" rel="noopener"&gt;https://gist.github.com/ricaun/4d425cd2853c58dc84cbef1c2e2484e3&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tested in AutoCAD 2021, 2025 and 2026.&lt;/P&gt;</description>
      <pubDate>Fri, 09 May 2025 14:39:35 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13621951#M85</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2025-05-09T14:39:35Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13622057#M86</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4176855"&gt;@ricaun&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The &lt;STRONG&gt;&lt;A href="https://help.autodesk.com/view/OARX/2024/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Ribbon_RibbonServices_RibbonPaletteSetCreated" target="_blank" rel="noopener nofollow noreferrer"&gt;RibbonServices.RibbonPaletteSetCreated&lt;/A&gt;&lt;/STRONG&gt; trigger when the &lt;STRONG&gt;RibbonControl&lt;/STRONG&gt; is available, but does not work if you try to add Ribbons when the event trigger.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;The code I referred you to uses the Idle event to delay execution of the code that populates the ribbon until it can do its job. That works well for me, and that code is being used by many without issue.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Using one event (ItemInitialized) to avoid having to use another event (Idle) doesn't make sense to me, and isn't something I would sanction. I'm not sure what your issue with the Idle event is, but it is routinely used by AutoCAD developers to solve many different problems, not just the ribbon issue. The other thing about using Idle to delay ribbon initialization code is that AutoCAD has finished building/rebuilding the ribbon at that point, whereas the ItemInitialized event fires when AutoCAD starts building/ rebuilding the ribbon. The other flaw with using the ItemInitialized event is that it doesn't allow customization of existing ribbon content created by AutoCAD, because when the event fires, AutoCAD hasn't finished building/rebilding the ribbon. Some of the ribbon customization I've done in the past involved adding content to existing Ribbon Tabs created by AutoCAD. Obviously, I can't do that until AutoCAD has already created the content that I want to add items to. So for that and other reasons, I prefer to add content to the ribbon &lt;STRONG&gt;&lt;EM&gt;after&lt;/EM&gt;&lt;/STRONG&gt; AutoCAD has fully-initialized it, which the Idle event allows me to do.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If you have some strange aversion to using the Idle event, you could instead use SynchronizationContext to execute your ribbon initialization code asynchronously, without the need to handle any events:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;static void ribbonPaletteSetCreated(object sender, EventArgs e)
{
   RibbonServices.RibbonPaletteSetCreated -= ribbonPaletteSetCreated;
   var context = Autodesk.AutoCAD.Runtime.SynchronizationContext.Current;
   context.Post(_ =&amp;gt;
   {
      /// Add contents to ribbon here
   }, null);
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There are also other reasons why I prefer to use the Idle event, that are mostly-because the Idle event is needed to deal with other problems &lt;EM&gt;unrelated to the ribbon&lt;/EM&gt;, and in many of those cases its use &lt;EM&gt;can't be avoided&lt;/EM&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So, I prefer to use just one event (Idle) to solve many problems rather than use different events to solve different problems. After you've run into the other problems that are solved using the Idle event, then my logic might be clearer..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You may also want to test your code because it uses both the QuitWillStart and the IExtensionApplication.Terminate() method, which is redundant. First, the Terminate() method isn't called until the host process exits, &lt;EM&gt;long after the ribbon has been destroyed, and most APIs are no-longer usable&lt;/EM&gt;. If you need to do something at shutdown, use the QuitWillStart event, and don't use Terminate() because it is basically useless for anything that requires API access.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 09 May 2025 18:19:10 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13622057#M86</guid>
      <dc:creator>ActivistInvestor</dc:creator>
      <dc:date>2025-05-09T18:19:10Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13622270#M87</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;The code I referred you to uses the Idle event to delay execution of the code that populates the ribbon until it can do its job. That works well for me, and that code is being used by many without issue.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Using one event (ItemInitialized) and having to handle it &lt;EM&gt;hundreds of times each time the ribbon is recreated&lt;/EM&gt; only to avoid having to use another event (Idle) that only needs to be handled once doesn't make sense to me, and isn't something I would sanction. Your latest code handles the ItemInitialized event continuously, which means your event handler is needlessly being called hundreds of times (once for each item added to the ribbon) each time the ribbon is rebuilt. Sorry, that makes no sense to me at all. I'm not sure what your issue with the Idle event is, but it is routinely used by AutoCAD developers to solve many different problems, not just the ribbon issue.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;I guess I don't want to wait for the &lt;STRONG&gt;Idle&lt;/STRONG&gt; to trigger, the &lt;STRONG&gt;ItemInitialized&lt;/STRONG&gt; trigger before and in the right time I add stuff in the Ribbon.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;With &lt;STRONG&gt;ItemInitialized&lt;/STRONG&gt; is kinda at the right time, and after the trigger I unsubscribe from the &lt;STRONG&gt;ItemInitialized&lt;/STRONG&gt;, only trigger for the code. Exactly the same thing you are doing with the &lt;STRONG&gt;Idle &lt;/STRONG&gt;event.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;If you have some strange aversion to using the Idle event, you could instead use SynchronizationContext to execute your ribbon initialization code asynchronously, without the need to handle any events:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Interesting, there are some difference to run &lt;STRONG&gt;Autodesk.AutoCAD.Runtime.SynchronizationContext.Current&lt;/STRONG&gt; and invoke something inside &lt;STRONG&gt;Idle&lt;/STRONG&gt;, I suppose the &lt;STRONG&gt;SynchronizationContext.Current.Post&amp;nbsp;&lt;/STRONG&gt;gonna trigger in the next &lt;STRONG&gt;Idle&lt;/STRONG&gt; event.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;There are also other reasons why I prefer to use the Idle event, that are mostly-because the Idle event is needed to deal with other problems &lt;EM&gt;unrelated to the ribbon&lt;/EM&gt;, and in many of those cases its use &lt;EM&gt;can't be avoided&lt;/EM&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;If is not related to create the ribbon, I suppose if not gonna be a problem in my case.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;So, I prefer to use just one event (Idle) to solve many problems rather than use different events to solve different problems. After you've run into the other problems that are solved using the Idle event, then my logic might be clearer..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;I have no idea what I'm doing in &lt;STRONG&gt;AutoCAD&lt;/STRONG&gt; &lt;STRONG&gt;API&lt;/STRONG&gt;, I just want to have a easier and safe way to create ribbon using a &lt;STRONG&gt;IExtensionApplication&lt;/STRONG&gt; and using what I know about &lt;STRONG&gt;Revit API&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is kinda odd that I can find an &lt;STRONG&gt;AutoCAD&lt;/STRONG&gt; way to register a ribbon &lt;STRONG&gt;IExtensionApplication&lt;/STRONG&gt;, in &lt;STRONG&gt;Revit API&lt;/STRONG&gt; is so normal...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Now thinking, make sense &lt;STRONG&gt;AutoCAD&lt;/STRONG&gt; is command base, when I start learning how to use &lt;STRONG&gt;AutoCAD&lt;/STRONG&gt;, never click in a &lt;STRONG&gt;RibbonButton&lt;/STRONG&gt;, only shortcut/commands.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 09 May 2025 18:31:52 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13622270#M87</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2025-05-09T18:31:52Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13622292#M88</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4176855"&gt;@ricaun&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;I guess I don't want to wait for the &lt;STRONG&gt;Idle&lt;/STRONG&gt; to trigger, the &lt;STRONG&gt;ItemInitialized&lt;/STRONG&gt; trigger before and in the right time I add stuff in the Ribbon.&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;For only adding items to the ribbon that's fine, however some ribbon customization involves &lt;EM&gt;adding items to existing tabs and panels&lt;/EM&gt;, which can't be done from an ItemInitialized event handler because it requires the ribbon to have been fully-created first.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4176855"&gt;@ricaun&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;I guess I don't want to wait for the &lt;STRONG&gt;Idle&lt;/STRONG&gt; to trigger, the &lt;STRONG&gt;ItemInitialized&lt;/STRONG&gt; trigger before and in the right time I add stuff in the Ribbon.&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;As mentioned above, some types of ribbon customization requires a fully-created ribbon, and for that one has to wait for it to happen (as in the Idle event)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4176855"&gt;@ricaun&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;Interesting, there are some difference to run &lt;STRONG&gt;Autodesk.AutoCAD.Runtime.SynchronizationContext.Current&lt;/STRONG&gt; and invoke something inside &lt;STRONG&gt;Idle&lt;/STRONG&gt;, I suppose the &lt;STRONG&gt;SynchronizationContext.Current.Post&amp;nbsp;&lt;/STRONG&gt;gonna trigger in the next &lt;STRONG&gt;Idle&lt;/STRONG&gt; event.&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Post() runs the delegate just before the Idle event is raised. There's no other way to execute code asynchronously on the main thread, because the code can't run until AutoCAD has finished whatever it was doing, so the SynchronizationContext.Post() method and the Idle event are just two different ways of doing the same thing. The former is easier to use because there are no events involved.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;Is kinda odd that I can find an &lt;STRONG&gt;AutoCAD&lt;/STRONG&gt; way to register a ribbon &lt;STRONG&gt;IExtensionApplication&lt;/STRONG&gt;, in &lt;STRONG&gt;Revit API&lt;/STRONG&gt; is so normal...&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;It's normal in AutoCAD too - You don't have to do any of this to put stuff on the Ribbon. You can just create a partial CUI file with ribbon content in it, and just load that CUI file, and AutoCAD does the work of adding it to the ribbon. The only issue with that is that you are limited to the predefined widgets that come in the box - no custom controls.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 09 May 2025 21:30:23 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13622292#M88</guid>
      <dc:creator>ActivistInvestor</dc:creator>
      <dc:date>2025-05-09T21:30:23Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623477#M89</link>
      <description>&lt;P&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt; I really appreciate you knowledge ribbons and AutoCAD, the OnStartup/OnShutdown to create/remove ribbon looks great.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I wonder if you play with Images to change to light/dark theme in AutoCAD automatically, to support high resolution images and so one.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Because I already did that in Revit was easy to import to AutoCAD. Here is my sample Addin &lt;span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:"&gt;😊&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="frame0329.png" style="width: 400px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1532102i6BB022B4E68F51AE/image-size/medium?v=v2&amp;amp;px=400" role="button" title="frame0329.png" alt="frame0329.png" /&gt;&lt;/span&gt;&lt;/TD&gt;&lt;TD&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="frame0369.png" style="width: 400px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1532103iE1649ED6B6D37872/image-size/medium?v=v2&amp;amp;px=400" role="button" title="frame0369.png" alt="frame0369.png" /&gt;&lt;/span&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AutoCADAddin - 2025-05-07 19-01-5 - 10.gif" style="width: 999px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1532097iFAFCAB091CB1FB83/image-size/large?v=v2&amp;amp;px=999" role="button" title="AutoCADAddin - 2025-05-07 19-01-5 - 10.gif" alt="AutoCADAddin - 2025-05-07 19-01-5 - 10.gif" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 10 May 2025 15:02:48 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623477#M89</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2025-05-10T15:02:48Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623589#M90</link>
      <description>&lt;P&gt;Not sure what your question is about. It's not hard to change the theme through code.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 10 May 2025 18:53:29 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623589#M90</guid>
      <dc:creator>ActivistInvestor</dc:creator>
      <dc:date>2025-05-10T18:53:29Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623604#M91</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;Not sure what your question is about. It's not hard to change the theme through code.&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;How are you doing the theme change check? Using &lt;STRONG&gt;Application.SystemVariableChanged&lt;/STRONG&gt;?&lt;/P&gt;&lt;P&gt;* &lt;A href="https://www.keanw.com/2014/04/supporting-autocad-2015s-dark-theme.html" target="_blank"&gt;https://www.keanw.com/2014/04/supporting-autocad-2015s-dark-theme.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And to update the image in the &lt;STRONG&gt;RibbonButton&lt;/STRONG&gt; after the theme changed how usually you do?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Don't know if &lt;STRONG&gt;AutoCAD&lt;/STRONG&gt; has some automatic magic for that.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 10 May 2025 19:18:04 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623604#M91</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2025-05-10T19:18:04Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623630#M92</link>
      <description>&lt;P&gt;How to deal with theme-dependent images depends on how your ribbon content is defined (e.g., via XAML or code), but there's no built-in way to automatically switch images when the theme changes.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This shows how to detect color theme changes without the overhead of watching system variables (which is not recommended):&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;using Autodesk.AutoCAD.Internal;

public static class ActiveTheme
{
   static ActiveTheme()
   {
      ActiveThemeColor.Instance().ColorThemeChanged += colorThemeChanged;
   }

   private static void colorThemeChanged(object sender, EventArgs e)
   {
      // TODO: Handle color theme change as required.
   }

   // Get current theme and use IsDark property:
   
   public static PaletteTheme CurrentTheme =&amp;gt;
      ThemeManager.PaletteSettings.CurrentTheme;
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 10 May 2025 20:32:05 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623630#M92</guid>
      <dc:creator>ActivistInvestor</dc:creator>
      <dc:date>2025-05-10T20:32:05Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623640#M93</link>
      <description>&lt;P&gt;Nice!&amp;nbsp; I actually was the &lt;STRONG&gt;ComponentManager.PropertyChanged&lt;/STRONG&gt;, to check if &lt;STRONG&gt;CurrentThemePropertyName &lt;/STRONG&gt;changed.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The &lt;STRONG&gt;ActiveThemeColor&lt;/STRONG&gt; looks great, it's has the &lt;STRONG&gt;ActiveThemeColor.CurrentTheme&lt;/STRONG&gt; with some enum.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There are some issues with using this?&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public static bool IsLight =&amp;gt; ActiveThemeColor.CurrentTheme == ColorThemeEnum.Light;&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 10 May 2025 20:44:43 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623640#M93</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2025-05-10T20:44:43Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623643#M94</link>
      <description>&lt;P&gt;The CurrentTheme property from the class in the previous post is an instance of a PaletteTheme, not an enum.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PaletteTheme has an IsDark property:&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;bool isLight = !ActiveTheme.CurrentTheme.IsDark;&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PaletteTheme also has a Color property for each UI element:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ActivistInvestor_1-1746911202209.gif" style="width: 999px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1532146i416D42B3F8E4B75B/image-size/large?v=v2&amp;amp;px=999" role="button" title="ActivistInvestor_1-1746911202209.gif" alt="ActivistInvestor_1-1746911202209.gif" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 10 May 2025 21:59:48 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623643#M94</guid>
      <dc:creator>ActivistInvestor</dc:creator>
      <dc:date>2025-05-10T21:59:48Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623667#M95</link>
      <description>&lt;P&gt;Yes, I notice there is the ribbon colors. I probably gonna use the enum just because is the same class. Just need to know if is light.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt;&amp;nbsp;wrote:&lt;P&gt;PaletteTheme also has properties for each color element:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ActivistInvestor_1-1746911202209.gif" style="width: 999px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1532146i416D42B3F8E4B75B/image-size/large?v=v2&amp;amp;px=999" role="button" title="ActivistInvestor_1-1746911202209.gif" alt="ActivistInvestor_1-1746911202209.gif" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Where I can find this useful dockable? Is some kinda or plugin to visualize internal AutoCAD proprieties?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 10 May 2025 21:51:57 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623667#M95</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2025-05-10T21:51:57Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623700#M96</link>
      <description>&lt;P&gt;What I said above is not entirely true, about managing theme colors and theme changes for images.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Rather than using System.Windows.Controls.Image, you can use this derivative:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;A href="https://help.autodesk.com/view/OARX/2026/PLK/?guid=OARX-ManagedRefGuide-Autodesk_Windows_Palettes_Controls_ThemedImage" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Autodesk.Windows.Palettes.Controls.ThemedImage&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;It has LightSource and DarkSource properties that can be assigned to the images to use for light and dark themes, and will automatically update the Image when the theme changes (no need to handle ThemeChanged events).&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4176855"&gt;@ricaun&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;Yes, I notice there is the ribbon colors. I probably gonna use the enum just because is the same class. Just need to know if is light.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Where I can find this useful dockable? Is some kinda or plugin to visualize internal AutoCAD proprieties?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;As for the control in the clip, that's just a floating&amp;nbsp;&lt;A href="https://help.autodesk.com/view/OARX/2023/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Windows_PaletteSet" target="_blank" rel="noopener"&gt;PaletteSet&lt;/A&gt; that hosts a WinForms UserControl containing a PropertyGrid (which is themed manually using the aforementioned PaletteTheme class). Yes, I made it to display properties of managed objects mostly for debugging, Unfortunately, sharing that control would be very difficult due to many dependencies it has on other code.&lt;/P&gt;</description>
      <pubDate>Sun, 11 May 2025 04:47:46 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13623700#M96</guid>
      <dc:creator>ActivistInvestor</dc:creator>
      <dc:date>2025-05-11T04:47:46Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13624185#M97</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;BR /&gt;As for the control in the clip, that's just a floating&amp;nbsp;&lt;A href="https://help.autodesk.com/view/OARX/2023/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Windows_PaletteSet" target="_blank" rel="noopener"&gt;PaletteSet&lt;/A&gt; that hosts a WinForms UserControl containing a PropertyGrid (which is themed manually using the aforementioned PaletteTheme class). Yes, I made it to display properties of managed objects mostly for debugging, Unfortunately, sharing that control would be very difficult due to many dependencies it has on other code.&lt;/BLOCKQUOTE&gt;&lt;P&gt;Nice!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I create a simple &lt;A href="https://help.autodesk.com/view/OARX/2023/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Windows_PaletteSet" target="_blank" rel="noopener"&gt;PaletteSet&lt;/A&gt; with a TextBox just to show the &lt;STRONG&gt;Debug.WriteLine/Console.WriteLine&lt;/STRONG&gt; just for debugging, one issue that I didn't figure out is how to force the &lt;A href="https://help.autodesk.com/view/OARX/2023/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Windows_PaletteSet" target="_blank" rel="noopener"&gt;PaletteSet&lt;/A&gt; to stay close or open based on the last user section. Or force to be dockable in the right when first time registered, in my sample at start floating in the left corner.... I noticed the Guid kinda force to remember the location after the first time.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;About your object debugging dockable, I though was something opensource like in Revit, we have the &lt;A href="https://github.com/lookup-foundation/RevitLookup" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;RevitLookUp.&lt;/STRONG&gt;&lt;/A&gt; Probably one day AutoCADLookUp will be created to snoop AutoCAD objecs.&lt;/P&gt;</description>
      <pubDate>Sun, 11 May 2025 15:10:56 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13624185#M97</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2025-05-11T15:10:56Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13624456#M98</link>
      <description>&lt;P&gt;To control the initial docking location of a PaletteSet, you set the Dock property &lt;STRONG&gt;&lt;EM&gt;after&lt;/EM&gt; &lt;/STRONG&gt;making the PaletteSet visible:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public class MyPalette : PaletteSet
{
   public MyPalette()
   {
      /// Initialze here, before making visible
      this.DockEnabled = DockSides.Left | DockSides.Right;
      this.Visible = true;
      /// Must be done after setting Visible = true:
      this.Dock = DockSides.Right;
   }
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In regards to&amp;nbsp;&lt;A href="https://github.com/lookup-foundation/RevitLookup" target="_blank" rel="noopener nofollow noreferrer"&gt;&lt;STRONG&gt;RevitLookUp&lt;/STRONG&gt;&lt;/A&gt;,&amp;nbsp;that is a derivative of &lt;A href="https://thebuildingcoder.typepad.com/blog/2009/02/rvtmgddbg.html" target="_blank" rel="noopener"&gt;RvtMgdDbg&lt;/A&gt;, which in-turn, is a descendent of &lt;A href="https://github.com/ADN-DevTech/MgdDbg" target="_blank" rel="noopener"&gt;MgdDbg&lt;/A&gt;, the original tool that was originally written specifically for AutoCAD, and was for the most-part a port of the original native &lt;A href="https://github.com/comphoner/ARXDBG/blob/master/App/ArxDbgApp.cpp" target="_blank" rel="noopener"&gt;ArxDbg&lt;/A&gt; tool to managed code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I don't use them as they didn't do what I needed, so I wrote my own snooping tool:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ActivistInvestor_0-1747011266890.png" style="width: 999px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1532308i18775A9ECE55BD06/image-size/large?v=v2&amp;amp;px=999" role="button" title="ActivistInvestor_0-1747011266890.png" alt="ActivistInvestor_0-1747011266890.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ActivistInvestor_0-1747013213736.png" style="width: 999px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1532326i91F54BBA35178EAA/image-size/large?v=v2&amp;amp;px=999" role="button" title="ActivistInvestor_0-1747013213736.png" alt="ActivistInvestor_0-1747013213736.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;That tool was built back during the Windows 7 era, hence the Windows 7-style UI. I've been spending a little time here and there porting it to .NET 10, and a more modern UI, along with support for browsing UI's like the Ribbon and any managed WinForms or WPF control or window.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But, it still has a long way to go:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ActivistInvestor_0-1747011909435.png" style="width: 677px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1532319iF92E07085E185A00/image-dimensions/677x529?v=v2" width="677" height="529" role="button" title="ActivistInvestor_0-1747011909435.png" alt="ActivistInvestor_0-1747011909435.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 12 May 2025 17:07:43 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13624456#M98</guid>
      <dc:creator>ActivistInvestor</dc:creator>
      <dc:date>2025-05-12T17:07:43Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13624519#M99</link>
      <description>&lt;P&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt;&amp;nbsp;I create a new topic about &lt;A href="https://help.autodesk.com/view/OARX/2023/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_Windows_PaletteSet" target="_blank" rel="noopener nofollow noreferrer"&gt;PaletteSet&lt;/A&gt; you probably could help in there &lt;span class="lia-unicode-emoji" title=":hugging_face:"&gt;🤗&lt;/span&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;A href="https://forums.autodesk.com/t5/net-forum/how-to-load-save-visible-paletteset/td-p/13624514" target="_blank"&gt;https://forums.autodesk.com/t5/net-forum/how-to-load-save-visible-paletteset/td-p/13624514&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4476837"&gt;@ActivistInvestor&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;In regards to&amp;nbsp;&lt;A href="https://github.com/lookup-foundation/RevitLookup" target="_blank" rel="noopener nofollow noreferrer"&gt;&lt;STRONG&gt;RevitLookUp&lt;/STRONG&gt;&lt;/A&gt;,&amp;nbsp;that is a derivative of &lt;A href="https://thebuildingcoder.typepad.com/blog/2009/02/rvtmgddbg.html" target="_blank" rel="noopener"&gt;RvtMgdDbg&lt;/A&gt;, which in-turn, is a descendent of &lt;A href="https://github.com/ADN-DevTech/MgdDbg" target="_blank" rel="noopener"&gt;MgdDbg&lt;/A&gt;, the original tool that was originally written specifically for AutoCAD, and was for the most-part a port of the original native &lt;A href="https://github.com/comphoner/ARXDBG/blob/master/App/ArxDbgApp.cpp" target="_blank" rel="noopener"&gt;ArxDbg&lt;/A&gt; tool to managed code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Nice, &lt;A href="https://thebuildingcoder.typepad.com/blog/2009/02/rvtmgddbg.html" target="_blank" rel="noopener"&gt;RvtMgdDbg&lt;/A&gt; is the first version.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The&amp;nbsp;&lt;A href="https://github.com/ADN-DevTech/MgdDbg" target="_blank" rel="noopener"&gt;MgdDbg&lt;/A&gt; does not have a installer, a bundle to copy or something?&lt;/P&gt;</description>
      <pubDate>Mon, 12 May 2025 02:19:18 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13624519#M99</guid>
      <dc:creator>ricaun</dc:creator>
      <dc:date>2025-05-12T02:19:18Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13624554#M100</link>
      <description>&lt;P&gt;I'm not sure about MgdDbg because I don't use it but it most likely can be used by NETLOAD command to load the .DLL.&lt;/P&gt;</description>
      <pubDate>Mon, 12 May 2025 03:07:11 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13624554#M100</guid>
      <dc:creator>ActivistInvestor</dc:creator>
      <dc:date>2025-05-12T03:07:11Z</dc:date>
    </item>
    <item>
      <title>Re: OnStartup/OnShutdown RibbonControl using IExtensionApplication</title>
      <link>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13624649#M101</link>
      <description>&lt;P&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4176855"&gt;@ricaun&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;You could also try &lt;A href="https://github.com/gileCAD/Gile.Inspector" target="_blank" rel="noopener"&gt;Inspector&lt;/A&gt; snoop tool (a .bundle installer is provided).&lt;/P&gt;</description>
      <pubDate>Mon, 12 May 2025 05:08:04 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/onstartup-onshutdown-ribboncontrol-using-iextensionapplication/m-p/13624649#M101</guid>
      <dc:creator>_gile</dc:creator>
      <dc:date>2025-05-12T05:08:04Z</dc:date>
    </item>
  </channel>
</rss>

