停駐視窗
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
}
}
← 主選單項目與工具列按鈕 專案檔案 →