Предоставление свойств окно свойств
В этом пошаговом руководстве представлены общедоступные свойства объекта в окне свойств . Изменения, внесенные в эти свойства, отражаются в окне "Свойства ".
Предоставление свойств окно свойств
В этом разделе описано, как создать пользовательское окно инструментов и отобразить общедоступные свойства связанного объекта панели окна в окне "Свойства ".
Предоставление свойств окно свойств
Каждое расширение Visual Studio начинается с проекта развертывания VSIX, который будет содержать ресурсы расширения. Создайте проект VISUAL Studio VSIX с именем
MyObjectPropertiesExtension
. Шаблон проекта VSIX можно найти в диалоговом окне "Новый проект ", выполнив поиск vsix.Добавьте окно инструментов, добавив шаблон элемента пользовательского окна инструментов с именем
MyToolWindow
. Щелкните правой кнопкой мыши узел проекта в Обозревателе решений, а затем выберите Добавить>Новый элемент. В диалоговом окне "Добавление нового элемента" перейдите к расширяемости элементов>Visual C# и выберите "Пользовательское окно инструментов". В поле "Имя" в нижней части диалогового окна измените имя файла на MyToolWindow.cs. Дополнительные сведения о создании настраиваемого окна инструментов см. в разделе "Создание расширения с помощью окна инструментов".Откройте MyToolWindow.cs и добавьте следующую инструкцию using:
using System.Collections; using System.ComponentModel; using Microsoft.VisualStudio.Shell.Interop;
Теперь добавьте следующие поля в
MyToolWindow
класс.private ITrackSelection trackSel; private SelectionContainer selContainer;
Добавьте в класс
MyToolWindow
приведенный далее код.private ITrackSelection TrackSelection { get { if (trackSel == null) trackSel = GetService(typeof(STrackSelection)) as ITrackSelection; return trackSel; } } public void UpdateSelection() { ITrackSelection track = TrackSelection; if (track != null) track.OnSelectChange((ISelectionContainer)selContainer); } public void SelectList(ArrayList list) { selContainer = new SelectionContainer(true, false); selContainer.SelectableObjects = list; selContainer.SelectedObjects = list; UpdateSelection(); } public override void OnToolWindowCreated() { ArrayList listObjects = new ArrayList(); listObjects.Add(this); SelectList(listObjects); }
Свойство
TrackSelection
используетсяGetService
для полученияSTrackSelection
службы, которая предоставляет ITrackSelection интерфейс. ОбработчикOnToolWindowCreated
событий иSelectList
метод вместе создают список выбранных объектов, содержащих только объект области окна инструментов. МетодUpdateSelection
сообщает окну "Свойства ", чтобы отобразить общедоступные свойства панели окна инструментов.Выполните сборку решения и запустите отладку. Должен появиться экспериментальный экземпляр Visual Studio.
Если окно свойств не отображается, откройте его, нажав клавишу F4.
Откройте окно MyToolWindow. Его можно найти в представлении>других окон.
Откроется окно, а общедоступные свойства панели окон отображаются в окне "Свойства ".
Измените свойство "Заголовок" в окне "Свойства" на "Мои свойства объекта".
Окно MyToolWindow подпись соответствующим образом изменяется.
Предоставление свойств окна инструментов
В этом разделе описано, как добавить окно инструментов и предоставить его свойства. Изменения, внесенные в свойства, отражаются в окне "Свойства ".
Предоставление свойств окна инструментов
Откройте MyToolWindow.cs и добавьте в класс общедоступное
MyToolWindow
логическое свойство IsChecked.[Category("My Properties")] [Description("MyToolWindowControl properties")] public bool IsChecked { get { if (base.Content == null) return false; return (bool)(( MyToolWindowControl) base.Content).checkBox.IsChecked; } set { ((MyToolWindowControl) base.Content).checkBox.IsChecked = value; } }
Это свойство получает состояние из проверка box WPF, которое будет создано позже.
Откройте MyToolWindowControl.xaml.cs и замените конструктор MyToolWindowControl следующим кодом.
private MyToolWindow pane; public MyToolWindowControl(MyToolWindow pane) { InitializeComponent(); this.pane = pane; checkBox.IsChecked = false; }
Это дает
MyToolWindowControl
доступ кMyToolWindow
области.В MyToolWindow.cs измените
MyToolWindow
конструктор следующим образом:base.Content = new MyToolWindowControl(this);
Перейдите в представление конструктора MyToolWindowControl.
Удалите кнопку и добавьте поле проверка из панели элементов в левый верхний угол.
Добавьте события Checked и Un проверка ed. Выберите проверка box в представлении конструктора. В окне "Свойства" нажмите кнопку обработчиков событий (в правом верхнем углу окна "Свойства"). Найдите флажок и введите проверкаbox_Checked в текстовом поле, а затем найдите un проверка ed и введите проверкаbox_Unпроверка в текстовом поле.
Добавьте обработчики событий проверка поля:
private void checkbox_Checked(object sender, RoutedEventArgs e) { pane.IsChecked = true; pane.UpdateSelection(); } private void checkbox_Unchecked(object sender, RoutedEventArgs e) { pane.IsChecked = false; pane.UpdateSelection(); }
Выполните сборку решения и запустите отладку.
В экспериментальном экземпляре откройте окно MyToolWindow .
Найдите свойства окна в окне "Свойства ". Свойство IsChecked отображается в нижней части окна в категории "Мои свойства ".
Установите флажок проверка в окне MyToolWindow. IsChecked в окне свойств изменяется на True. Снимите поле проверка в окне MyToolWindow. IsChecked в окне свойств изменяется на False. Измените значение IsChecked в окне "Свойства ". Поле проверка в окне MyToolWindow изменяется в соответствии с новым значением.
Примечание.
Если необходимо удалить объект, отображаемый в окне свойств , сначала вызовите
OnSelectChange
null
контейнер выбора. После удаления свойства или объекта можно изменить контейнер выбора, который обновил SelectableObjects и SelectedObjects списки.
Изменение списков выбора
В этом разделе вы добавите список выбора для базового класса свойств и используйте интерфейс окна инструментов, чтобы выбрать список выбора для отображения.
Изменение списков выбора
Откройте MyToolWindow.cs и добавьте открытый класс с именем
Simple
.public class Simple { private string someText = ""; [Category("My Properties")] [Description("Simple Properties")] [DisplayName("My Text")] public string SomeText { get { return someText; } set { someText = value; } } [Category("My Properties")] [Description("Read-only property")] public bool ReadOnly { get { return false; } } }
SimpleObject
Добавьте свойство вMyToolWindow
класс, а также два метода для переключения выбора окна свойств между областью окна иSimple
объектом.private Simple simpleObject = null; public Simple SimpleObject { get { if (simpleObject == null) simpleObject = new Simple(); return simpleObject; } } public void SelectSimpleList() { ArrayList listObjects = new ArrayList(); listObjects.Add(SimpleObject); SelectList(listObjects); } public void SelectThisList() { ArrayList listObjects = new ArrayList(); listObjects.Add(this); SelectList(listObjects); }
В MyToolWindowControl.cs замените обработчики поля проверка следующими строками кода:
private void checkbox_Checked(object sender, RoutedEventArgs e) { pane.IsChecked = true; pane.SelectSimpleList(); pane.UpdateSelection(); } private void checkbox_Unchecked(object sender, RoutedEventArgs e) { pane.IsChecked = false; pane.SelectThisList(); pane.UpdateSelection(); }
Выполните сборку решения и запустите отладку.
В экспериментальном экземпляре откройте окно MyToolWindow .
Выберите поле проверка в окне MyToolWindow. В окне "Свойства" отображаются
Simple
свойства объекта, SomeText и ReadOnly. Снимите флажок. Общедоступные свойства окна отображаются в окне "Свойства ".Примечание.
Отображаемое имя SomeText — "Мой текст".
Рекомендация
В этом пошаговом руководстве реализовано, ISelectionContainer чтобы коллекция выбранных объектов и выбранная коллекция объектов были одинаковыми. В списке браузера свойств отображается только выбранный объект. Более полную реализацию ISelectionContainer см. в примерах Reference.ToolWindow.
Окна инструментов Visual Studio сохраняются между сеансами Visual Studio. Дополнительные сведения о сохранении состояния окна инструмента см. в разделе ProvideProfileAttribute.