メインメニュー項目およびツールバーボタン

Extension は、メインメニューに、Extension 用のメニュー項目を追加できます。メニュー項目は、サブメニューを使って階層化することもできます。

また、各メニュー項目について、対応するツールバーボタンの追加もできます。(ツールバーボタンのみの追加はサポートされていません)

メニュー項目を選択もしくは、ツールバーボタンをクリックすると、Extension のコマンドが呼び出されます。呼び出されるコマンドは、メニュー項目とツールバーボタンとで違いはありません。
ただし、ツールバーボタンから呼び出されたかどうかは、区別することができます。

この拡張ポイントを使うには、インターフェイス IRCXMainMenuItemProvider を実装したクラスを作成し、エクスポートします。

[Export(typeof(IRCXMainMenuItemProvider))]
public class MainMenuItem : IRCXMainMenuItemProvider
{
    /// <inheritdoc />
    public string Id => Main.CommonId;

    /// <inheritdoc />
    public string MenuItemId => "MyExtension.MainMenuItem";

    /// <inheritdoc />
    public IRCXMainMenuItemProvider.MenuItem MainMenuRootItem
    {
        get
        {
            return new IRCXMainMenuItemProvider.MenuItem
            {
                Caption = new RCXCaption(Main.CommonId, Caption.MainMenu),
                Icon = Main.CommonIcon,
                CommandName = "Main",
                ToolTip = new RCXCaption(Main.CommonId, Caption.MainMenu),
            };
        }
    }

    /// <inheritdoc />
    public IRCXMainMenuItemProvider.TopLevelMenu TopLevel => IRCXMainMenuItemProvider.TopLevelMenu.Default;

    /// <inheritdoc />
    public Task ExecuteMainMenuItemCommandAsync(
        string commandName,
        bool fromToolBar
    )
    {
        // (Code here)
        return Task.CompletedTask;
    }
}

複数のメニュー項目を持つ場合、MenuItemId は他と重複しないよう注意してください。

以下は、サブメニューを持たせる場合の例です。

    public IRCXMainMenuItemProvider.MenuItem MainMenuRootItem
    {
        get
        {
            return new IRCXMainMenuItemProvider.MenuItem
            {
                Caption = new RCXCaption(Main.CommonId, Caption.MainMenu),
                Icon = Icon,
                CommandName = "Main",
                Children =
                [
                    new()
                    {
                        Caption = new RCXCaption(Main.CommonId, Caption.MainMenu_Sub1),
                        Icon = Icon,
                        CommandName = "Sub1",
                        ToolTip = new RCXCaption(Main.CommonId, Caption.ToolTip_Sub1),
                    },
                    new()
                    {
                        Caption = new RCXCaption(Main.CommonId, Caption.MainMenu_Sub2),
                        Icon = Icon,
                        CommandName = "Sub2",
                        ToolTip = null,
                    },
                ]
            };
        }
    }

ToolTip を null にすると、そのメニュー項目に対するツールバーボタンは表示しません。
現仕様では、メニュー項目に表示する文字列などを、動的に変更する手段は用意されていません。