Поделиться через


Отображение свойств в окне "Свойства"

В этом пошаговом руководстве представлены общедоступные свойства объекта в окне свойств . Изменения, внесенные в эти свойства, отражаются в окне "Свойства ".

Отображение свойств в окне "Свойства"

В этом разделе описано, как создать пользовательское окно инструментов и отобразить общедоступные свойства связанного объекта панели окна в окне "Свойства ".

Предоставление свойств окну "Свойства"

  1. Каждое расширение Visual Studio начинается с проекта развертывания VSIX, который будет содержать ресурсы расширения. Создайте проект VISUAL Studio VSIX с именем MyObjectPropertiesExtension. Шаблон проекта VSIX можно найти в диалоговом окне нового проекта, выполнив поиск vsix.

  2. Добавьте окно инструментов, добавив шаблон элемента пользовательского окна инструментов с именем MyToolWindow. В обозревателе решений щелкните правой кнопкой мыши на узле проекта и выберите Добавить>Новый элемент. В диалоговом окне "Добавление нового элемента" перейдите красширяемостиэлементов> Visual C# и выберите "Пользовательское окно инструментов". В поле "Имя " в нижней части диалогового окна измените имя файла на MyToolWindow.cs. Дополнительные сведения о создании настраиваемого окна инструментов см. в разделе "Создание расширения с помощью окна инструментов".

  3. Откройте файл MyToolWindow.cs и добавьте следующую инструкцию using:

    using System.Collections;
    using System.ComponentModel;
    using Microsoft.VisualStudio.Shell.Interop;
    
  4. Теперь добавьте следующие поля в MyToolWindow класс.

    private ITrackSelection trackSel;
    private SelectionContainer selContainer;
    
    
  5. Добавьте в класс 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 сообщает окну "Свойства ", чтобы отобразить общедоступные свойства панели окна инструментов.

  6. Создайте проект и запустите отладку. Должен появиться экспериментальный экземпляр Visual Studio.

  7. Если окно свойств не отображается, откройте его, нажав клавишу F4.

  8. Откройте окно MyToolWindow . Его можно найти в Вид>Другие окна.

    Откроется окно, а общедоступные свойства панели окон отображаются в окне "Свойства ".

  9. Измените свойство "Заголовок" в окне "Свойства" на "Мои свойства объекта".

    Заголовок окна MyToolWindow изменяется соответствующим образом.

Отобразить свойства окна инструментов

В этом разделе описано, как добавить окно инструментов и предоставить его свойства. Изменения, внесенные в свойства, отражаются в окне "Свойства ".

Для отображения свойств окна инструментов

  1. Откройте 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, который будет создан позже.

  2. Откройте MyToolWindowControl.xaml.cs и замените конструктор MyToolWindowControl следующим кодом.

    private MyToolWindow pane;
    public MyToolWindowControl(MyToolWindow pane)
    {
        InitializeComponent();
        this.pane = pane;
        checkBox.IsChecked = false;
    }
    

    Это дает MyToolWindowControl доступ к MyToolWindow области.

  3. В MyToolWindow.cs измените MyToolWindow конструктор следующим образом:

    base.Content = new MyToolWindowControl(this);
    
  4. Перейдите в представление конструктора MyToolWindowControl.

  5. Удалите кнопку и добавьте флажок из панели элементов в левый верхний угол.

  6. Добавьте события Checked и Unchecked. Выберите флажок в представлении конструктора. В окне "Свойства" нажмите кнопку обработчиков событий (в правом верхнем углу окна "Свойства "). Найдите Отмечено и введите checkbox_Checked в текстовом поле, затем найдите Снято и введите checkbox_Unchecked в текстовом поле.

  7. Добавьте обработчики событий для флажков.

    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();
    }
    
  8. Создайте проект и запустите отладку.

  9. В экспериментальном экземпляре откройте окно MyToolWindow .

    Найдите свойства окна в окне "Свойства ". Свойство IsChecked отображается в нижней части окна в категории "Мои свойства ".

  10. Установите флажок в окне MyToolWindow . IsChecked в окне свойств изменяется на True. Снимите флажок в окне MyToolWindow . IsChecked в окне свойств изменяется на False. Измените значение IsChecked в окне "Свойства ". Флажок в окне MyToolWindow меняется, чтобы соответствовать новому значению.

    Замечание

    Если необходимо удалить объект, отображаемый в окне свойств, сначала вызовите OnSelectChange с null контейнером выбора. После освобождения свойства или объекта можно изменить контейнер выбора, в котором обновлены списки SelectableObjects и SelectedObjects.

Изменение списков выбора

В этом разделе вы добавите список выбора для базового класса свойств и используйте интерфейс окна инструментов, чтобы выбрать список выбора для отображения.

Чтобы изменить списки выбора

  1. Откройте 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; }
        }
    }
    
  2. 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);
    }
    
  3. В 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();
    }
    
  4. Создайте проект и запустите отладку.

  5. В экспериментальном экземпляре откройте окно MyToolWindow .

  6. Установите флажок в окне MyToolWindow . В окне "Свойства" отображаются Simple свойства объекта, SomeText и ReadOnly. Снимите флажок. Общедоступные свойства окна отображаются в окне "Свойства ".

    Замечание

    Отображаемое имя SomeText"Мой текст".

Лучшие практики

В этом пошаговом руководстве ISelectionContainer реализовано так, что коллекция выбираемых объектов и коллекция выбранных объектов являются одной и той же коллекцией. В списке браузера свойств отображается только выбранный объект. Более полную реализацию ISelectionContainer см. в примерах Reference.ToolWindow.

Окна инструментов Visual Studio сохраняются между сеансами Visual Studio. Дополнительные сведения о сохранении состояния окна инструмента см. в разделе ProvideProfileAttribute.