停靠窗口
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
}
}
← 主菜单项及工具栏按钮 项目文件 →