Пошаговое руководство: Создание окно инструментов (часть 2 из 4)
Общие окна инструментов в интегрированной среде разработки (ide) Visual Studio. Некоторые примеры окна инструментов, включенных в Visual Studio Обозреватель решений" Список задач" Список ошибоки Вывод окна. Все окна инструментов имеют некоторые функции в общем, например, все может быть закреплено в интегрированной среде разработки аналогичным образом. Прогнозируемая элемент закрепление позволяет пользователям управлять их задачи и данные.
В этом пошаговом руководстве учебные материалы по созданию окно инструментов в интегрированной среде разработки Visual Studio с помощью следующих шагов:
Создайте окно инструментов.
Внедрение элемента управления в окне инструментов.
Добавление панели инструментов окна инструментов.
Добавление команд на панели инструментов.
Реализация команды.
Задать положение по умолчанию для окна инструментов.
Это пошаговое руководство является частью ряда, изучите, как расширить интегрированной среды разработки Visual Studio. Дополнительные сведения см. в разделе Пошаговые руководства по Visual Studio для настройки с помощью VSPackages.
Обязательные компоненты
Чтобы выполнить это пошаговое руководство, необходимо устанавливать SDK для Visual Studio 2010.
Примечание
Дополнительные сведения о пакете SDK для Visual Studio см. в разделе интеграция SDK Visual Studio.Чтобы узнать, как загрузить пакет SDK для Visual Studio см. в разделе Центр разработчиков расширяемости Visual Studio на веб-сайте MSDN.
Расположения для шаблона проекта пакета Visual Studio
Шаблон проекта пакета Visual Studio в выпуске 3 местах в Создать проект диалоговое окно:
Под расширяемость Visual Basic. Язык по умолчанию для проекта Visual Basic.
Под Расширяемость C#. Язык по умолчанию для проекта c#.
Под Другие типы проектов расширяемости. Язык по умолчанию для проекта C++.
Создайте окно инструментов
Создание окна инструментов
Создайте VSPackage " FirstToolWin. Можно также создать каталог для решения. Нажмите кнопку ОК.
На странице приветствия, нажмите кнопку Далее.
На Выбрать язык программирования выберите страницу Visual c# OR Visual Basic Нажать Создать новый файл ключа для подписывания сборки, а затем нажмите кнопку Далее.
Предположим, что имеется, чтобы проверить Базовые сведения о пакете VSPackage страница. Значение Имя компании окно использоваться в качестве пространства имен для всех классов в проекте. имя VSPackage окно предоставляет имя для пакета экзаменами и компилированного выпускными версия VSPackage окно предоставляет сведения о версии. Минимальный выпуска Visual Studio определяет, какие выпуски Visual Studio пакет должен выполняться на. Содержимое Подробные сведения окно отображается на странице свойств готового пакета. Изменить значок кнопка позволяет выбрать значок, обозначающий пакет.
Для этого пошагового руководства, примите значения по умолчанию, щелкнув Далее.
На Выберите параметры пакета VSPackage выберите страницу Команда меню и Окно инструментов, а затем нажмите кнопку Далее.
Примечание
Параметр команды меню, необходимые в следующем пошаговом руководстве Пошаговое руководство: Расширение окно инструментов (часть 3 из 4), который создает в данном проекте.
На параметры команды меню страницы в Имя команды окно, тип Windows Media. в Идентификатор команды окно, тип cmdidWindowsMedia, а затем нажмите кнопку Далее.
На Параметры окна инструментов страницы в имя окна окно, тип Проигрыватель Windows Media. в Идентификатор команды поле введите допустимый идентификатор, например cmdidWindowsMediaWin, а затем нажмите кнопку Далее.
На Выберите параметры проекта тестов страница ", clear Проект интеграционного теста и Проект модульного теста, а затем нажмите кнопку Готово.
IN Обозреватель решенийдважды щелкните MyControl.xaml.
Щелкните правой кнопкой мыши щелкните я! кнопка, а затем щелкните элемент Удалить.
Внедрение элемента управления в окне инструментов
Далее добавьте элемент управления игрок в Windows Media Панель элементов затем добавьте его в окно инструментов.
Внедрение элемента управления в окне инструментов
в Панель элементовразверните Все элементы управления WPF раздел и ищет элемент списка воспроизведения.
Чтобы добавить медиа-проигрыватель в окно инструментов перетащите элемент списка воспроизведения мониторинг из Панель элементов в форме MyControl.
В конструкторе выберите элемент управления " список " воспроизведения, а затем просмотрите доступные свойства Свойства окна. Некоторые свойства стандартны во всех элементах управления Windows Forms. Однако другие предоставляются элементом управления, например, Источник, который используется, чтобы загрузить файл во время выполнения.
В меню Файл выберите команду Сохранить все.
Добавление панели инструментов окна инструментов
Путем добавления панель инструментов следующим образом, гарантируете, что его градиенты и цвета согласованы с остальноями интегрированной среды разработки.
Добавление панели инструментов окна инструментов
IN Обозреватель решенийвыберите команду открыть FirstToolWin.vsct. Файл .vsct определяет элементы графического пользовательского интерфейса (графического интерфейса пользователя) в окне инструментов с помощью XML.
в <Symbols> раздел находит <GuidSymbol> узел которого name атрибут guidFirstToolWinCmdSet. Добавьте следующие 2 <IDSymbol> элементы в список <IDSymbol> элементы в этом узле для идентификации панель инструментов и группу панели инструментов.
<IDSymbol name="ToolbarID" value="0x1000" /> <IDSymbol name="ToolbarGroupID" value="0x1001" />
Перед <Groups> раздел создает a <Menus>раздел, выглядит следующим образом:
<Menus> <Menu guid="guidFirstToolWinCmdSet" id="ToolbarID" priority="0x0000" type="ToolWindowToolbar"> <Parent guid="guidFirstToolWinCmdSet" id="ToolbarID" /> <Strings> <ButtonText>Tool Window Toolbar</ButtonText> <CommandName>Tool Window Toolbar</CommandName> </Strings> </Menu> </Menus>
Все контейнеры для команд определяются как различные типы меню. Своим type атрибут это один набор отображаемых как панель инструментов в окне инструментов. guidиid параметры образуют полное идентификатор панели инструментов. Обычно <Parent> меню относится к содержащему группе. Однако панель инструментов определен как собственный родительский элемент. Следовательно, один и тот же идентификатор используется для <Menu>и<Parent> элементы. priority атрибут просто "0".
Панели инструментов во многом напоминает меню. Например, точно так же, как и меню может иметь группы в составе команды в панели инструментов также могут иметь группы. (В меню группы команд разделяются горизонтальными прямыми. На панелях инструментов, группы не разделяются визуальные рассекателями.)
Добавление новой <Group> элемент <Groups> раздел, чтобы указать группу, объявленным в <Symbols> раздел.
<Group guid="guidFirstToolWinCmdSet" id="ToolbarGroupID" priority="0x0000"> <Parent guid="guidFirstToolWinCmdSet" id="ToolbarID"/> </Group>
Устанавливая родительские и идентификатор guid на идентификатор guid и идентификатор панели инструментов, необходимо поместить группу в панели инструментов.
Сохраните файл.
Добавление команды в панели инструментов
Далее добавьте команды на панели инструментов. Команды отображаются в виде кнопки и элементы управления.
Добавление команд в панели инструментов
В FirstToolWin.vsct в <Symbols> раздел, объявляющий 3 команды непосредственно после панель инструментов и панели инструментов группируют объявления.
<IDSymbol name="cmdidWindowsMediaOpen" value="0x132" /> <IDSymbol name="cmdidWindowsMediaFilename" value="0x133" /> <IDSymbol name="cmdidWindowsMediaFilenameGetList" value="0x134" />
Обратите внимание, что команды cmdidWindowsMedia и cmdidWindowsMediaWin уже объявите.
в <Buttons> раздел, a <Button> элемент уже существует, и он содержит определение для команд cmdidWindowsMedia и cmdidWindowsMediaWin. Добавьте другие <Button> элемент для указания команды cmdidWindowsMediaOpen.
<Button guid="guidFirstToolWinCmdSet" id="cmdidWindowsMediaOpen" priority="0x0101" type="Button"> <Parent guid="guidFirstToolWinCmdSet" id="ToolbarGroupID"/> <Icon guid="guidImages" id="bmpPic1" /> <Strings> <CommandName>cmdidWindowsMediaOpen</CommandName> <ButtonText>Load File</ButtonText> </Strings> </Button>
Обратите внимание, что приоритет второй кнопки 0x0101. Поле со списком, которое будет добавлено в следующем шаге имеет приоритет 0x0100. Следовательно, поле со списком появляется в первую позицию и кнопка отображается в вторую позицию.
Чтобы указать расположение для пользователя ввести некоторый текст, добавьте поле со списком. Добавление поля со списком способов добавления кнопки, за исключением того, что в поле со списком a <Combos> раздел.
Create a <Combos> раздел непосредственно после </Buttons> тег, то есть одна запись, чтобы задать соответствующие поля со списком.
<Combos> <Combo guid="guidFirstToolWinCmdSet" id="cmdidWindowsMediaFilename" priority="0x0100" type="DynamicCombo" idCommandList="cmdidWindowsMediaFilenameGetList" defaultWidth="130"> <Parent guid="guidFirstToolWinCmdSet" id="ToolbarGroupID" /> <CommandFlag>IconAndText</CommandFlag> <CommandFlag>CommandWellOnly</CommandFlag> <CommandFlag>StretchHorizontally</CommandFlag> <Strings> <CommandName>Filename</CommandName> <ButtonText>Enter a Filename</ButtonText> </Strings> </Combo> </Combos>
Сохранить и закрыть FirstToolWin.vsct.
IN Обозреватель решенийв папке проекта, открытые PkgCmdID.cs или PkgCmdID.vb а затем добавить следующие линии в классе сразу после существующих членов.
Public Const cmdidWindowsMediaOpen As Integer = &H132 Public Const cmdidWindowsMediaFilename As Integer = &H133 Public Const cmdidWindowsMediaFilenameGetList As Integer = &H134 Public Const ToolbarID As Integer = &H1000
public const int cmdidWindowsMediaOpen = 0x132; public const int cmdidWindowsMediaFilename = 0x133; public const int cmdidWindowsMediaFilenameGetList = 0x134; public const int ToolbarID = 0x1000;
Это делает команды доступным в коде.
Сохраните и закройте файл.
Реализация команды
Теперь напишите код, реализующий команды.
Реализация команды
IN Обозреватель решенийоткрыть MyToolWindow.cs или MyToolWindow.vb, содержащие класс самого окна инструментов.
Добавьте следующий код сразу после существовать с помощью выписки.
Imports System.ComponentModel.Design
using System.ComponentModel.Design;
Эта линия позволяет использовать CommandID класс полностью квалифицировать без него.
Добавьте следующий код в конструктор, непосредственно перед линией, которая сообщает control = new MyControl() (C#) или Me.Content = New MyControl() (VB).
' Create the toolbar. Me.ToolBar = New CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidWindowsMediaWin) Me.ToolBarLocation = CInt(VSTWT_LOCATION.VSTWT_TOP) ' Create the handlers for the toolbar commands. Dim mcs As OleMenuCommandService = TryCast(GetService(GetType(IMenuCommandService)), OleMenuCommandService) If mcs IsNot Nothing Then Dim toolbarbtnCmdID As CommandID = New CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidMyCommand) Dim menuItem As MenuCommand = New MenuCommand(New EventHandler(AddressOf ButtonHandler), toolbarbtnCmdID) mcs.AddCommand(menuItem) ' Command for the combo itself Dim menuMyDynamicComboCommandID As CommandID = New CommandID(GuidList.guidFirstToolWinCmdSet, CInt(PkgCmdIDList.cmdidMyCommand)) Dim menuMyDynamicComboCommand As OleMenuCommand = New OleMenuCommand(New EventHandler(AddressOf ComboHandler), menuMyDynamicComboCommandID) mcs.AddCommand(menuMyDynamicComboCommand) ' Command for the combo's list Dim comboListCmdID As CommandID = New CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidWindowsMediaWin) Dim comboMenuList As OleMenuCommand = New OleMenuCommand(New EventHandler(AddressOf ComboListHandler), comboListCmdID) mcs.AddCommand(comboMenuList) End If
// Create the toolbar. this.ToolBar = new CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.ToolbarID); this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP; // Create the handlers for the toolbar commands. var mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService; if (null != mcs) { var toolbarbtnCmdID = new CommandID( GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidWindowsMediaOpen); var menuItem = new MenuCommand(new EventHandler( ButtonHandler), toolbarbtnCmdID); mcs.AddCommand(menuItem); // Command for the combo itself var menuMyDynamicComboCommandID = new CommandID( GuidList.guidFirstToolWinCmdSet, (int)PkgCmdIDList.cmdidWindowsMediaFilename); var menuMyDynamicComboCommand = new OleMenuCommand( new EventHandler(ComboHandler), menuMyDynamicComboCommandID); mcs.AddCommand(menuMyDynamicComboCommand); // Command for the combo's list var comboListCmdID = new CommandID( GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidWindowsMediaFilenameGetList); var comboMenuList = new OleMenuCommand( new EventHandler(ComboListHandler), comboListCmdID); mcs.AddCommand(comboMenuList); }
Этот код добавляет 3 команды, по одной для кнопки и 2 для поля со списком. Поле со списком необходимо 2 команд, по одной для когда пользователь выполняет запись, а другой для заполнения раскрывающегося списка.
Из обработчиков событий для элементов управления панели инструментов код должен иметь возможность доступа к медиа-проигрывателя элемент управления, который является дочерним элементом класса MyControl.
IN Обозреватель решенийщелкните правой кнопкой мыши щелкните MyControl.xaml Просмотр кодаи добавьте следующий код к классу MyControl.
Public ReadOnly Property MediaPlayer() As System.Windows.Controls.MediaElement Get Return MediaElement1 End Get End Property
public System.Windows.Controls.MediaElement MediaPlayer { get { return mediaElement1; } }
Сохраните файл.
Вернитесь к MyToolWindow.cs или MyToolWindow.vb и добавьте следующий код в конце класса, только окончательными до 2 заключительными фигурными скобками (c#) или выпиской класса элемент (Visual Basic).
Private Sub ButtonHandler(ByVal sender As Object, ByVal arguments As EventArgs) If comboValue IsNot Nothing AndAlso comboValue.Trim().Length <> 0 Then LoadFile(comboValue) End If End Sub Private Sub ComboHandler(ByVal sender As Object, ByVal arguments As EventArgs) Dim eventArgs As OleMenuCmdEventArgs = TryCast(arguments, OleMenuCmdEventArgs) If eventArgs IsNot Nothing Then Dim output As IntPtr = eventArgs.OutValue Dim input As Object = eventArgs.InValue If input IsNot Nothing Then comboValue = input.ToString() ElseIf output <> IntPtr.Zero Then Marshal.GetNativeVariantForObject(comboValue, output) End If End If End Sub Public Sub LoadFile(ByVal comboValue As String) control.MediaPlayer.Source = New Uri(comboValue) End Sub Private Sub ComboListHandler(ByVal sender As Object, ByVal arguments As EventArgs) End Sub
private void ButtonHandler(object sender, EventArgs arguments) { if (comboValue != null && comboValue.Trim().Length != 0) { LoadFile(comboValue); } } private void ComboHandler(object sender, EventArgs arguments) { var eventArgs = arguments as OleMenuCmdEventArgs; if (eventArgs != null) { IntPtr output = eventArgs.OutValue; object input = eventArgs.InValue; if (input != null) { comboValue = input.ToString(); } else if (output != IntPtr.Zero) { Marshal.GetNativeVariantForObject(comboValue, output); } } } public void LoadFile(string comboValue) { control.MediaPlayer.Source = new System.Uri(comboValue); } private void ComboListHandler(object sender, EventArgs arguments) { }
MenuMyDynamicComboCommand и menuItem Обратите внимание, что совместно используют один и тот же обработчик событий. Поэтому окно инструментов может воспроизвести файл, указанный в поле со списком. В этом пошаговом руководстве, можно не вводить код для функции ComboListHandler. В следующем пошаговом руководстве Пошаговое руководство: Расширение окно инструментов (часть 3 из 4)необходимо добавить код, который заполняет раскрывающийся список с помощью имен списка воспроизведения.
Комбинированный обработчик сохраняет все действия вводе в его в переменной члена. Чтобы добавить эту переменную добавьте следующий код в начало класс (в Visual Basic, после наследует выписку). Одновременно, добавьте переменную-член для хранения элемент управления.
Dim control As MyControl Dim comboValue As String
private MyControl control; string comboValue = "";
При нажатии кнопки кнопка считывает значение этих локальной переменной и загрузки его в медиа-проигрывателе.
Задайте по умолчанию положение для окна инструментов
Затем укажите расположение по умолчанию, в интегрированной среде разработки для окна инструментов. Сведения о конфигурации для окна инструментов в файле FirstToolWinPackage.cs.
Задать положение по умолчанию для окна инструментов
IN Обозреватель решенийоткрыть FirstToolWinPackage.cs или FirstToolWinPackage.vb. В этом файле найдите ProvideToolWindowAttribute атрибут FirstToolWinPackage класс. Этот код передает тип MyToolWindow в конструктор. Чтобы определить положение по умолчанию, необходимо добавить дополнительные параметры конструктору после примера.
<PackageRegistration(UseManagedResourcesOnly:=True), _ InstalledProductRegistration("#110", "#112", "1.0", IconResourceID:=400), _ ProvideMenuResource("Menus.ctmenu", 1), _ ProvideToolWindow(GetType(MyToolWindow), Style:=Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed, Window:="3ae79031-e1bc-11d0-8f78-00a0c9110057"), _ Guid(GuidList.guidFirstToolWinPkgString)> _ Public NotInheritable Class FirstToolWinPackage Inherits Package
[ProvideToolWindow(typeof(MyToolWindow), Style = Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed, Window = "3ae79031-e1bc-11d0-8f78-00a0c9110057")]
Первый параметр с именем стиль и его значение нашито, означающее, что окно становится вкладкой в существующем поле. Окно название окна, задается параметром. его значением GUID. В этом случае одна для GUID Обозреватель решений.
Примечание
Дополнительные сведения об идентификаторах GUID для окон в интегрированной среде разработки см. в разделе константы vsWindowKind на веб-сайте MSDN.
Сохраните результаты работы.
Тестирование окно инструментов
Тестирование окно инструментов
Нажмите клавишу F5, чтобы открыть новый экземпляр Visual Studio экспериментальном построении.
На Просмотреть меню наведите курсор на пункт Другие окна затем перейдите Проигрыватель Windows Media.
Должно открыться окно инструментов медиа-проигрывателя в том же окне как Обозреватель решений.
В поле со списком в окне инструментов медиа-проигрывателя введите полный путь и имя файла, поддерживаемых звука или видео файла, например C:\windows\media\chimes.wav, давления Вставить, а затем нажмите кнопку граничащая.
Примечание
Необходимо ввести имя файла в текстовое поле, поскольку окно инструментов медиа-проигрывателя не имеет a Открытие файла диалоговое окно.
Что дальше?
IN Пошаговое руководство: Расширение окно инструментов (часть 3 из 4)можно узнать, как добавить несколько элементов управления в окно инструментов. Добавляется кнопка, которая показывает a Открытие файла откроется диалоговое окно, которое можно использовать, чтобы выбрать файл для воспроизведения в медиа-проигрывателе. Можно также добавить раскрывающийся список списков воспроизведения, чтобы можно было выбрать один из них для воспроизведения.
См. также
Задачи
Пошаговое руководство. Добавление панели инструментов в IDE
Пошаговое руководство: Добавление панели инструментов в окно инструментов