Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом пошаговом руководстве представлены общедоступные свойства объекта в окне свойств . Изменения, внесенные в эти свойства, отражаются в окне "Свойства ".
Отображение свойств в окне "Свойства"
В этом разделе описано, как создать пользовательское окно инструментов и отобразить общедоступные свойства связанного объекта панели окна в окне "Свойства ".
Предоставление свойств окну "Свойства"
Каждое расширение 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; } }Это свойство получает состояние из флажка 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 и Unchecked. Выберите флажок в представлении конструктора. В окне "Свойства" нажмите кнопку обработчиков событий (в правом верхнем углу окна "Свойства "). Найдите Отмечено и введите checkbox_Checked в текстовом поле, затем найдите Снято и введите checkbox_Unchecked в текстовом поле.
Добавьте обработчики событий для флажков.
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.