專案檔案

可以在 RC+ 的專案中,新增由 Extension 管理的自定義檔案。

若要使用此擴展點,請建立實作介面 IRCXProjectFileProvider 的類別,並將其匯出。

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

    /// <inheritdoc />
    public string FileTypeName => "MyExtensionFiles";

    /// <inheritdoc />
    public string Extension => ".ext";

    /// <inheritdoc />
    public bool UseDefaultProjectExplorerItem => true;

    /// <inheritdoc />
    public RCXCaption ProjectExplorerRootItemCaption => new(Main.CommonId, Caption.FileCategory);

    /// <inheritdoc />
    public ImageSource? ProjectExplorerRootItemIconData => Main.CommonIcon;

    /// <inheritdoc />
    public ImageSource? FileIcon => Main.CommonIcon;

    /// <inheritdoc />
    public RCXCaption FileTypeNameCaption => new(Main.CommonId, Caption.FileTypeName);

    /// <inheritdoc />
    public async Task OpenAsync(
        string fileName
    )
    {
        // Open project file editor window
        ProjectFileEditor editorControl = new();

        if (editorControl.DataContext is ProjectFileEditorViewModel editorViewModel)
        {
            editorViewModel.FileName = fileName;
            editorViewModel.LoadContent();
            await Main.GetAPI<IRCXWindowAPI>().ShowDockingWindowAsync(editorViewModel, editorControl);
        }
    }

    /// <inheritdoc />
    public void WriteInitialContent(
        FileStream fileStream
    )
    {
        try
        {
            // Write initial content of the file (optional)
            using var writer = new StreamWriter(fileStream, Encoding.UTF8);
            writer.WriteLine("ProjectFile Initial Content");
        }
        catch (Exception)
        {
            // Handle Error
        }
    }
}

在 Extension 中,需實作以下處理。

  1. 檔案「開啟」處理(OpenAsync)
    • 自定義專案檔案的提供,通常會與可編輯該檔案的編輯器一併提供。若編輯器使用停駐視窗,則其實作方式與前述停駐視窗的實作方法相同。典型的實作方式如上所述,建立編輯器控制項,將從檔案讀取的內容傳遞給其檢視模型,並顯示編輯器視窗。
  2. 檔案建立時的初始內容「寫入」處理(WriteInitialContent)
    • 呼叫本方法時,檔案會以空白狀態建立,並傳遞與檔案關聯的 FileStream。若初始內容可為空,本方法無需特別處理。

將 UseDefaultProjectExplorerItem 旗標設為 true 時,可在專案總管中新增 Extension 的樹狀項目。(若不使用本功能,則必須搭配下一節所述的擴展點使用)

此情況下的樹狀項目由下列部分構成。

  • 作為 Extension 檔案類型的父項目
    • 作為子選單,包含「新檔案...」、「現有檔案...」兩項的「新增項目」內容功能表。
  • 顯示已新增檔案檔名的子項目
    • 包含「開啟」、「從專案中排除」、「刪除」三項的內容功能表。