ドッキングウィンドウ

Extension は、コンテンツとなるユーザーコントロールと、そのビューモデルを提供することで、ドッキングウィンドウを表示できます。

ダイアログウィンドウ(モーダルまたは、モードレス)は、WPF の標準機能で表示させることが可能ですので、API でのサポートはありません。

ユーザーコントロール用のビューモデルクラスは、インターフェイス IRCXUserControlViewModel を実装する必要があります。

internal partial class DockingWindowContentViewModel : IRCUserControlViewModel
{
    /// <inheritdoc />
    public string Id => Main.CommonId;

    /// <inheritdoc />
    public string ViewModelId => $"MyExtension.DockingWindow";

    /// <inheritdoc />
    public bool KeepOpenWhenProjectClosing => false;

    /// <summary>
    /// Captions
    /// </summary>
    public static IRCXCaptionGetter Captions { get; } = Main.Captions!;

    /// <inheritdoc />
    public RCXCaption WindowCaption { get; set; } = new(Main.CommonId, Caption.WindowTitle);

    /// <inheritdoc />
    public ImageSource? WindowIcon { get; set; } = Main.CommonIcon;

    /// <inheritdoc />
    public Task<bool> CloseAsync()
    {
        return Task.FromResult(true);
    }

    /// <inheritdoc />
    public Task<bool> SaveAsync()
    {
        return Task.FromResult(true);
    }

    /// <inheritdoc />
    public void Reload()
    {
    }

    /// <inheritdoc />
    public void Copy()
    {
    }

    /// <inheritdoc />
    public void Cut()
    {
    }

    /// <inheritdoc />
    public void Paste()
    {
    }

    /// <inheritdoc />
    public void SelectAll()
    {
    }

    /// <inheritdoc />
    public void Undo()
    {
    }

    /// <inheritdoc />
    public void Redo()
    {
    }

    /// <inheritdoc />
    public void ShowHelp()
    {
    }

    /// <summary>
    /// Show docking window
    /// </summary>
    /// <returns>Task</returns>
    public static async Task Show()
    {
        DockingWindowContent control = new();

        if (control.DataContext is DockingWindowContentViewModel controlViewModel)
        {
            await Main.GetAPI<IRCXWindowAPI>().ShowDockingWindowAsync(controlViewModel, control);
        }
    }
}

編集コマンド(Copy, Cut, Paste, SelectAll, Undo, Redo)は、メインウィンドウの編集メニューの、該当項目の選択で呼び出されます。

これらの各メニュー項目の有効/無効を取得・設定するには、ウィンドウ API の GetContentState または SetContentState メソッドを用います。

以下は、上記 DockingWindowContentViewModel の中で、Undo を有効にする例です。

var api = Main.GetAPI<IRCXWindowAPI>();

var state = api.GetContentState(this);
api.SetContentState(this, state | ContentState.CanUndo);

ウィンドウ表示中に、F10 キーを押すと、ShowHelp メソッドが呼び出されます。

以下は、ShowHelp で、Extension が持つ PDF マニュアルを表示させる例です。(この例では、PDF マニュアルのファイルは、プロジェクトの Resources フォルダにあるものとします。ファイルを Extension に含めるには、Visual Studio で、ファイルのプロパティの「ビルドアクション」を「コンテンツ」とし、「出力ディレクトリにコピー」を「常にコピーする」または、「新しい場合はコピーする」に設定します)

public void ShowHelp()
{
    try
    {
        var helpFilePath = Path.Combine(
            Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!,
            "Resources",
            "Manual.pdf"
        );

        ProcessStartInfo processStartInfo = new()
        {
            FileName = helpFilePath,
            UseShellExecute = true,
        };
        Process.Start(processStartInfo);
    }
    catch (Exception)
    {
        // Error handling
    }
}