我正在为Visual Studio 2013编写C#文档大纲扩展。
这个想法是有一个大纲窗口,如果用户点击一个大纲元素,光标会跳转到代码文档中的链接位置。我正在使用EnvDTE.Document类来实现这一点:
DTE2 dte = GetService(typeof(DTE)) as DTE2;
var currentDocument = dte.ActiveDocument;
currentDocument.Activate();
var selection = (EnvDTE.TextSelection) CurrentDocument.Selection;
selection.MoveToLineAndOffset(line, offset);
我在OnMouseDoubleClick
事件处理程序中进行了激活和选择更改。
问题是,首先焦点会按预期发生变化,但我的工具窗口会重新获得焦点。 如何防止焦点返回到我的工具窗口?
答案 0 :(得分:2)
找到了解决方案!
实际问题:
问题是由TreeView
气泡行为引起的。即即使你处理MouseDoubleClick
事件,它也会冒泡到树根元素。我的第一级TreeViewItem
s没有连接我的OnMousDoubleClick
事件处理程序。因此,一旦事件泡沫到达,他们就会重新关注焦点。
<强>解决方案:强>
将OnMousDoubleClick
处理程序连接到树中所有 TreeViewItem
元素并让所有人调用
currentDocument.Activate();
在事件处理程序的开头 - 总是。