專案檔案
可以在 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 中,需實作以下處理。
- 檔案「開啟」處理(OpenAsync)
- 自定義專案檔案的提供,通常會與可編輯該檔案的編輯器一併提供。若編輯器使用停駐視窗,則其實作方式與前述停駐視窗的實作方法相同。典型的實作方式如上所述,建立編輯器控制項,將從檔案讀取的內容傳遞給其檢視模型,並顯示編輯器視窗。
- 檔案建立時的初始內容「寫入」處理(WriteInitialContent)
- 呼叫本方法時,檔案會以空白狀態建立,並傳遞與檔案關聯的 FileStream。若初始內容可為空,本方法無需特別處理。
將 UseDefaultProjectExplorerItem 旗標設為 true 時,可在專案總管中新增 Extension 的樹狀項目。(若不使用本功能,則必須搭配下一節所述的擴展點使用)
此情況下的樹狀項目由下列部分構成。
- 作為 Extension 檔案類型的父項目
- 作為子選單,包含「新檔案...」、「現有檔案...」兩項的「新增項目」內容功能表。
- 顯示已新增檔案檔名的子項目
- 包含「開啟」、「從專案中排除」、「刪除」三項的內容功能表。