Ich hatte ja hier vorgestellt wie man eigene Tabs zum Ribbon hinzufügen kann. Nicolas hat in den Kommentaren ein tolles Beispiel gepostet wie man ein Icon umschalten kann. Habe das mal in ein Script gepackt und noch eine Farbumschaltung eingebaut.

Vielen Dank Nicolas für das Beispiel und die Idee 💡!
Um das Script nutzen zu können muss unter EPLAN/Data/Bilder ein Bild mit dem Dateinamen Icon_template.svg liegen. In der SVG kann anstatt einer Farbe der Platzhalter icon_color eingetragen werden und die Farbe wechselt dann von rot auf grün. Das Beispiel findet Ihr hier Icon_template.svg.

using System.Drawing;
using System.IO;
using System.Text;
using Eplan.EplApi.Base;
using Eplan.EplApi.Gui;
using Eplan.EplApi.Scripting;

public class ChangeRibbonState
{
  private const string TAB_NAME = "ToogleTab";
  private const string GROUP_NAME = "Group";
  private const string ACTION_NAME = "ToogleAction";
  private static bool _state;

  [DeclareAction(ACTION_NAME)]
  public void Action()
  {
    // Here you can get the state from somewhere else (like settings etc.)
    Set(!_state);
  }

  private static void Set(bool state)
  {
    _state = state;
    Set();
  }
    
  [DeclareUnregister]
  public void Unregister()
  {
    RemoveRibbonTab();
  }

  [DeclareEventHandler("Eplan.EplApi.OnMainEnd")]
  public void OnMainEnd()
  {
    RemoveRibbonTab();
  }
    
  private void RemoveRibbonTab()
  {
    RibbonBar ribbonBar = new RibbonBar();
    RibbonTab ribbonTab = ribbonBar.GetTab(TAB_NAME);
    if (ribbonTab != null)
    {
      ribbonTab.Remove();
    } 
  }

  [DeclareRegister]
  public void Register()
  {
    Set();
  }
    
  [DeclareEventHandler("Eplan.EplApi.OnMainStart")]
  public void OnMainStart()
  {
    Set();
  }

  private static void Set()
  {
    var ribbonBar = SetupRibbonBar();

    // Icon
    string imagePath = Path.Combine(PathMap.SubstitutePath("$(MD_IMG)"), "Icon.svg");
    string imageTemplatePath = Path.Combine(PathMap.SubstitutePath("$(MD_IMG)"), "Icon_template.svg");

    string color = Color.Red.Name;
    if (_state)
    {
      color = Color.DarkGreen.Name;
    }

    string content = File.ReadAllText(imageTemplatePath, Encoding.UTF8);
    content = content.Replace("icon_color", color);
    if (File.Exists(imagePath))
    {
      File.Delete(imagePath);
    }
    File.WriteAllText(imagePath, content, Encoding.UTF8);
    RibbonIcon ribbonIcon = ribbonBar.AddIcon(imagePath);

    // Command
    string commandName = ACTION_NAME;
    var ribbonCommandInfo = new RibbonCommandInfo(commandName, ACTION_NAME);
    ribbonBar.UnregisterCommand(ACTION_NAME, TAB_NAME, GROUP_NAME);
    ribbonBar.RegisterCommand(ribbonCommandInfo, ribbonIcon, TAB_NAME, GROUP_NAME);
  }

  private static RibbonBar SetupRibbonBar()
  {
    var ribbonBar = new RibbonBar();

    // Tab
    var ribbonTab = ribbonBar.GetTab(TAB_NAME);
    if (ribbonTab == null)
    {
      ribbonTab = ribbonBar.AddTab(TAB_NAME);
    }

    // Group
    var ribbonCommandGroup = ribbonTab.GetCommandGroup(GROUP_NAME);
    if (ribbonCommandGroup == null)
    {
      ribbonTab.AddCommandGroup(GROUP_NAME);
    }
    return ribbonBar;
  }
}