要實現類似 Visual Studio 的智能提示(IntelliSense),核心在於即時響應文本變更,並根據上下文動態生成候選列表。具體流程如下:
TextChanged)。. 或 -> 時:解析光標前的對象實例,反射獲取其公開屬性與方法。ListBox 或自定義 ToolStripDropDown),綁定過濾後的數據源。純手工實現工作量極大,建議直接集成成熟庫:
CompletionDataProvider 擴展。// 監聽文本變更
editor.TextChanged += (s, e) => {
var triggerChar = e.Changes.FirstOrDefault()?.Text;
if (triggerChar == "." || triggerChar == ">" || char.IsLetterOrDigit(triggerChar[0])) {
ShowIntelliSense(editor, GetCompletionsAt(editor.CaretOffset));
}
};
// 顯示提示窗
void ShowIntelliSense(TextEditor editor, IEnumerable<CompletionData> data) {
var listBox = new ListBox { ItemsSource = data };
var popup = new ToolStripDropDown();
popup.Items.Add(new ToolStripControlHost(listBox));
popup.Show(editor, editor.GetCaretScreenPosition());
}
提示:初學者可先從關鍵字補全入手,逐步加入語義分析;企業級項目強烈建議基於 Roslyn 二次開發。