丢失Window焦点在自己的Visual Studio扩展中(使用EnvDTE)

时间:2014-10-24 12:44:39

标签: c# visual-studio add-in envdte

我正在为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事件处理程序中进行了激活和选择更改。

问题是,首先焦点会按预期发生变化,但我的工具窗口会重新获得焦点。 如何防止焦点返回到我的工具窗口?

1 个答案:

答案 0 :(得分:2)

找到了解决方案!

实际问题:

问题是由TreeView气泡行为引起的。即即使你处理MouseDoubleClick事件,它也会冒泡到树根元素。我的第一级TreeViewItem s没有连接我的OnMousDoubleClick事件处理程序。因此,一旦事件泡沫到达,他们就会重新关注焦点。

<强>解决方案:

OnMousDoubleClick处理程序连接到树中所有 TreeViewItem元素并让所有人调用

currentDocument.Activate();

在事件处理程序的开头 - 总是。