每次我在 Visual Studio (2005) 中查看表单或对话框时,属性和工具箱窗格都会显示在我的屏幕右侧。这很好,因为它们对于操作对话框很有用。
但是,一旦我切换回源代码,这些窗格就会妨碍...有没有办法让它们自动消失?
每次我在 Visual Studio (2005) 中查看表单或对话框时,属性和工具箱窗格都会显示在我的屏幕右侧。这很好,因为它们对于操作对话框很有用。
但是,一旦我切换回源代码,这些窗格就会妨碍...有没有办法让它们自动消失?
我最近在 VS2010 中使用宏在 asp.net MVC3 视图中从代码切换到设计视图时显示和隐藏工具面板。我认为它可以很容易地适应您的情况。
这在EnvironmentEvents
预生成内容之后的 VS 宏 IDE 中的类文件中。
<System.ContextStaticAttribute()> Public WithEvents CommandEvents As EnvDTE.CommandEvents
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles _
DTEEvents.OnMacrosRuntimeReset
CommandEvents = DTE.Events.CommandEvents
End Sub
Private Sub DTEEvents_OnStartupComplete() Handles _
DTEEvents.OnStartupComplete
CommandEvents = DTE.Events.CommandEvents
End Sub
Public Sub CommandEvents_AfterExecute( _
ByVal Guid As String, _
ByVal ID As Integer, _
ByVal CustomIn As Object, _
ByVal CustomOut As Object) _
Handles CommandEvents.AfterExecute
If DTE.Commands.Item(Guid, ID).Name = "View.ViewDesigner" Then
DTE.ExecuteCommand("View.Toolbox")
End If
If DTE.Commands.Item(Guid, ID).Name = "View.ViewMarkup" Then
DTE.Windows.Item(Constants.vsWindowKindToolbox).Close()
End If
End Sub
使用事件的指导而不是 if 语句可能会更好地优化它。当您使用热键切换视图以及视图菜单时,它可以工作,但不能使用上下文菜单。
对于 vs2015:
using EnvDTE;
using EnvDTE80;
public class E : VisualCommanderExt.IExtension
{
private EnvDTE80.DTE2 DTE;
private EnvDTE.WindowEvents windowEvents;
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) {
this.DTE = DTE;
DTE.Events.WindowEvents.WindowActivated += OnWindowActivated;
}
public void Close() {
// i read somewhere this has to be done on close.
// but it gives gives me error on every IDE close. so i commented it .
//DTE.Events.WindowEvents.WindowActivated -= OnWindowActivated;
}
private void OnWindowActivated(Window gotFocus, Window lostFocus) {
HidePropertiesWindowInCodeOrTextView(gotFocus );
}
public void HidePropertiesWindowInCodeOrTextView(Window gotFocus ) {
if (gotFocus.Document == null) return;
var pwin = DTE.Windows.Item(Constants.vsWindowKindProperties);
pwin.AutoHides = !gotFocus.Caption.EndsWith(" [Design]") ;
}
}
我没有放弃屏幕右侧的空间,而是将我的属性和工具箱窗格拖到托管解决方案资源管理器和类视图等的左侧框架中。我宁愿有一个多功能框屏幕的一侧比有代码包围。如果您同时需要它们,您可以将工具箱放在解决方案资源管理器窗格中,然后将属性窗格堆叠在解决方案资源管理器下方,这样可以始终与工具箱一起查看一些属性。
我知道这不是您正在寻找的答案,但它是一种不同的方式来保持该屏幕空间可用于代码而不会弄乱自动隐藏(我发现自动隐藏真的是一个烦恼而不是帮助。)
对于 vs2019:
我改进了 bh_earth0 的解决方案。现在,当您跳转到代码时,它会保存属性和工具箱的可见性状态。当设计选项卡被激活时,它会加载窗格的先前状态。
菜单 > 扩展 > 管理扩展
找到并安装“Visual Commander”。(现在您有了名为“VCmd”的新菜单)
Menu > "VCmd" > Extensions ...(您将在右侧看到一个扩展窗格)
在扩展窗格中按添加按钮。(新标签窗口将打开。)
为扩展写一个名称(例如 AutoHide)。
选择语言为 C#。
复制并粘贴以下代码:
按保存。然后按编译。然后按安装
重新启动 Visual Studio 并享受 :-)
using EnvDTE;
using EnvDTE80;
public class E : VisualCommanderExt.IExtension
{
private EnvDTE80.DTE2 DTE;
private EnvDTE.WindowEvents windowEvents;
private bool bPropWinVisible = false;
private bool bToolWinVisible = false;
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) {
this.DTE = DTE;
DTE.Events.WindowEvents.WindowActivated += OnWindowActivated;
}
public void Close() {
}
private void OnWindowActivated(Window gotFocus, Window lostFocus) {
if (gotFocus.Document == null) return;
if (lostFocus.Document == null) return;
var pwin = DTE.Windows.Item(Constants.vsWindowKindProperties);
var twin = DTE.Windows.Item(Constants.vsWindowKindToolbox);
if(gotFocus.Caption.EndsWith(".cs [Design]") && lostFocus.Caption.EndsWith(".cs") ) {
pwin.AutoHides = bPropWinVisible;
twin.AutoHides = bToolWinVisible;
}
else if(gotFocus.Caption.EndsWith(".cs") && lostFocus.Caption.EndsWith(".cs [Design]")) {
bPropWinVisible = pwin.AutoHides;
bToolWinVisible = twin.AutoHides;
pwin.AutoHides = true;
twin.AutoHides = true;
}
}
}
如果您单击这些工具窗口上的“图钉”图标,您可以切换窗口是始终保持打开状态,还是仅在鼠标靠近它们时保持打开状态。当然,有时我的鼠标会朝那个方向移动,当我不希望它们出现时它们会弹出,但这就是生活......