项目文件
可以向 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 文件类型的父项目
- 作为子菜单,具有由“新建文件...”和“已有文件...”两个项目构成的“添加新项目”上下文菜单。
- 已添加文件的文件名作为子项目显示。
- 包含“打开”、“从项目中排除”、“删除”三个项目的上下文菜单。
← 停靠窗口 项目资源管理器的树状项目 →