Как программно прикрепить окно надстройки Visual Studio к вкладке?

Я создаю небольшую надстройку в надежде, что с графикой в ​​Visual Studio будет весело и легко работать. Однако было одно небольшое раздражение: я не могу понять, как прикрепить мое недавно созданное окно к панели вкладок.

Это все F #, но решение должно состоять всего из нескольких вызовов функций, поэтому, пожалуйста, не стесняйтесь использовать C # или VB в своем ответе.

type WindowManager(applicationObject: DTE2, addInInstance: AddIn) = 
    member this.CreateWindow(control: Type, caption) = 
        let windowInterface = applicationObject.Windows :?> Windows2
        let tempObj = ref null
        let assemblyLocation = System.Reflection.Assembly.GetExecutingAssembly().Location
        let className = control.FullName
        let instanceGuid = System.Guid.NewGuid().ToString("B")
        let toolWindow = windowInterface.CreateToolWindow2( addInInstance, assemblyLocation, className, caption, instanceGuid, tempObj)
        toolWindow.Visible <- true

Я думаю, мне просто нужно связать это с чем-то в applicationObject. Проблема только в чем.


person Rick Minerich    schedule 09.09.2010    source источник
comment
После дня без намека на ответ я добавил сюда вопрос форума MSDN: social.msdn.microsoft.com/Forums/en-US/vsx/thread/   -  person Rick Minerich    schedule 10.09.2010


Ответы (2)


Насколько я понимаю, единственный способ управлять положением окна инструмента — предоставить его через VSPackage, а не через надстройку (см. http://msdn.microsoft.com/en-us/library/bb166406.aspx и http://msdn.microsoft.com/en-us/library/bb165452.aspx для получения дополнительной информации).

Я полагаю, что причина этого ограничения в том, что положение отдельных окон инструментов контролируется пользователем; даже если вы предоставляете окно инструмента через VSPackage и указываете его положение с помощью магии реестра, как описано в приведенных выше ссылках, вы все равно контролируете только местоположение первого появления окна инструмента. После этого местоположение всегда будет исходить из того места, где пользователь переместил ваше окно инструментов, и это очень преднамеренно не переопределяется.

Возможно, мне не хватает некоторых новых механизмов VS2010.

person Dmitry Lomov    schedule 10.09.2010
comment
Ужасно, что вы не можете это контролировать, так как вы можете создавать окна во время выполнения. Но если это так, то так оно и есть. - person Rick Minerich; 14.09.2010

Кажется, я разобрался:

toolWindow.Linkable <- false
toolWindow.WindowState <- vsWindowState.vsWindowStateMaximize
toolWindow.Visible <- true
person Rick Minerich    schedule 14.09.2010