【问题标题】:How to adress/ call my custom tool window in Visual Studio如何在 Visual Studio 中寻址/调用我的自定义工具窗口
【发布时间】:2019-10-17 12:32:42
【问题描述】:

通过this 简单的 MSDN 教程,我构建了自己的 CustomToolWindow。但是我找不到任何方法来填充它,因为我找不到引用它的方法。

我们的目标是将它与this tutorial 结合起来,我可以用它来构建一个CustomDebuggerVisualizer。这意味着我希望我的 CustomDebuggerVisualizer 显示为我的 CustomToolWindow 的内容。

我知道this method,但我也不能引用它,我认为你不能从扩展本身之外调用它。

在我看来,我对自己习惯的“运行时世界”以及这里的“visual studio extension/SDK”世界没有把握。

【问题讨论】:

    标签: c# visual-studio-2017 window visual-studio-extensions debuggervisualizer


    【解决方案1】:

    我试图想象我挣扎的地方。

    Visualization

    编辑:取得了进展:

    当一个在vsix扩展包内时,可以通过查询dte对象

    using EnvDTE;
    using EnvDTE80;  
    using System.ComponentModel.Composition; 
    
    DTE2 dte = (DTE2)ServiceProvider.GlobalProvider.GetService(typeof(DTE));
    

    有了这个,调试器就可以被访问,它包含各种信息,例如。在这种情况下,它包含当前活动的字段等等。

    因此,这是将数据从运行时传输到 ToolWindow 的方法。问题是如何将 DebugVisualizer 带入等式,因为它不是包的一部分,因此无法调用 dte。但我很喜欢。

    【讨论】:

    • 您好,朋友,感谢您的分享,请将您的回复标记为self answer,这将有助于其他社区成员更轻松地搜索此有用信息,这只是一个提醒:)
    【解决方案2】:

    但是我找不到任何方法来填充它,因为我不能 找到引用它的方法。

    我查看了您在上面共享的 totorial 链接并找到了此文档:Writing A Custom Debugger Visualizer using WPF for the UI。所以看起来我们可以将Debugger Visualizer与WPF结合起来,并且由于自定义工具窗口项具有与WPF UI类似的功能,我认为我们可以将逻辑填充到xx.xaml和xx.xaml.cs文件中,请参阅:

    基本上,我们可以用Debugger Vusualizer+WPF 中可能使用的逻辑来填充这两个文件。要调用一个自定义工具窗口,我们可以单击相关命令(按钮)或使用代码打开自定义工具窗口。类似于this issue的东西:

                ToolWindowPane window = this.FindToolWindow(typeof(MyToolWindow), 0, true);
                if ((null == window) || (null == window.Frame))
                {
                    throw new NotSupportedException(Resources.CanNotCreateWindow);
                }
                IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
                Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show());
    

    我不确定你为什么需要以编程方式调用自定义窗口,根据教程,我猜你只需要View=>Windows 中的一个按钮...希望它有所帮助,如果我有什么误解,请感受免费纠正我:)

    【讨论】:

    • @ManuelBlattner 好像可以填写xx.xaml、xx.xaml.cs或者创建的xx.cs文件中的内容。如果我的回答有助于解决您的问题,您可以考虑marking it as answer,如果问题仍然阻碍您,请随时告诉我:)
    • 感谢您的回复!你写的是正确的。你问我为什么需要以编程方式调用它:我没有以编程方式调用它,但我必须以某种方式用我想要可视化的应用程序的内容填充它。例如。一个多边形。因此,不知何故,我需要参考 ToolWindows viewModel 来填充所述多边形以将其可视化。例如。我知道每个窗口都有一个唯一的 GUID,但我不知道如何使用它来查找窗口。
    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2015-12-04
    • 1970-01-01
    • 2017-04-30
    相关资源
    最近更新 更多