不在资源视图中时隐藏属性/工具箱窗格?

Posted

技术标签:

【中文标题】不在资源视图中时隐藏属性/工具箱窗格?【英文标题】:Hide Properties/Toolbox Pane when not in Resource View? 【发布时间】:2010-11-11 12:02:09 【问题描述】:

每次我在 Visual Studio (2005) 中查看表单或对话框时,属性和工具箱窗格都会显示在我的屏幕右侧。这很好,因为它们对于操作对话框很有用。

但是,一旦我切换回源代码,这些窗格就会妨碍...有没有办法让它们自动消失?

【问题讨论】:

自从我开始使用 VS 以来,这一直困扰着我。 @Blorgbeard 感谢您提供赏金!让我们看看我们是否能得到一个像样的答案! 您可能需要使您的问题更准确才能得到一个好的答案。 我尽可能使用 32" 屏幕。在我的 13.3" 平板电脑上,VS 确实让人头疼…… 【参考方案1】:

我最近在 VS2010 中使用了一个宏,该宏在 asp.net MVC3 视图中从代码到设计视图来回切换时显示和隐藏工具面板。我认为它可以很容易地适应您的情况。

这在预生成内容之后的 VS 宏 IDE 中的 EnvironmentEvents 类文件中。

<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

使用事件的 guid 而不是 if 语句可能会更好地优化它。当您使用热键切换视图以及视图菜单时,它可以工作,但不能使用上下文菜单。

【讨论】:

这看起来很有希望!我会看看我能不能让它工作。看起来赏金属于你。 如何使这段代码工作?我已经将它粘贴到 MyMacros.EnvironmentEvents 中,保存了 MyMacros,关闭并打开了 Visual Studio,但是当我切换到源代码或设计器时,什么也没有发生。我还应该做什么?【参考方案2】:

对于 vs2015:

    菜单 > 工具 > 扩展和更新 安装“视觉指挥官”。 (现在您有了名为“VCmd”的新菜单) 菜单>“VCmd”>扩展...(您将在右侧看到一个扩展窗格) 在扩展窗格中按添加按钮。 (新标签窗口将打开。) 为扩展写一个名称。 选择语言为 C#。 粘贴以下代码: 按保存。然后按编译。然后按安装

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]") ;
    

【讨论】:

【参考方案3】:

我没有放弃屏幕右侧的空间,而是将我的属性和工具箱窗格拖到托管解决方案资源管理器和类视图等的左侧框架中。我宁愿拥有一个多屏幕一侧的目的框比将代码包围。如果您同时需要它们,您可以将工具箱放在解决方案资源管理器窗格中,然后将属性窗格堆叠在解决方案资源管理器下方,这样可以始终与工具箱一起查看一些属性。

我知道这不是您正在寻找的答案,但它是一种不同的方式来保持屏幕空间可用于代码而不会弄乱自动隐藏(我发现自动隐藏真的是一个烦恼而不是帮助.)

【讨论】:

【参考方案4】:

对于 vs2019:

我改进了 bh_earth0 的解决方案。现在,当您跳转到代码时,它会保存属性和工具箱的可见性状态。当设计选项卡被激活时,它会加载以前的窗格状态。

    菜单 > 扩展 > 管理扩展

    找到并安装“Visual Commander”。 (现在您有了名为“VCmd”的新菜单)

    Menu > "VCmd" > Extensions ...(您将在右侧看到一个 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;
            
        
    
    

【讨论】:

【参考方案5】:

如果您单击这些工具窗口上的“图钉”图标,您可以切换窗口是始终保持打开状态,还是仅在鼠标靠近它们时保持打开状态。当然,有时我的鼠标会朝那个方向移动,当我不希望它们出现时它们会弹出,但这就是生活......

【讨论】:

是的,我知道 pin,但这不是我要找的。 :)

以上是关于不在资源视图中时隐藏属性/工具箱窗格?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms - 从父页面代码隐藏的列表视图中访问控件

当期望值不在视图包中时重定向到登录页面

MFC:显示/隐藏拆分器窗格

Xcode 8 属性“隐藏”不会在 Interface Builder 中隐藏视图

返回视图时隐藏对象属性为空[重复]

用于 SharePoint 的 QlikView webpart 不在属性窗格中显示对象