ドッキングウィンドウ
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
}
}