Properties window
Applies to:
Visual Studio
Visual Studio for Mac
Visual Studio Code
Use this window to view and change the design-time properties and events of selected objects that are located in editors and designers. You can also use the Properties window to edit and view file, project, and solution properties. You can find Properties Window on the View menu. You can also open it by pressing F4 or by typing Properties in the search box.
The Properties window displays different types of editing fields, depending on the needs of a particular property. These edit fields include edit boxes, drop-down lists, and links to custom editor dialog boxes. Properties shown in gray are read-only.
UIElement List
Object name
Lists the currently selected object or objects. Only objects from the active editor or designer are visible. When you select multiple objects, only properties common to all selected objects appear.
Categorized
Lists all properties and property values for the selected object, by category. You can collapse a category to reduce the number of visible properties. When you expand or collapse a category, you see a plus (+) or minus (-) to the left of the category name. Categories are listed alphabetically.
Alphabetical
Alphabetically sorts all design-time properties and events for selected objects. To edit an undimmed property, click in the cell to its right and enter changes.
Property Pages
Displays the Property Pages dialog box or Project Designer for the selected item. Property Pages displays a subset, the same or a superset of the properties available in the Properties window. Use this button to view and edit properties related to your project’s active configuration.
Properties
Displays the properties for an object. Many objects also have events that can be viewed using the Properties window.
Sort by Property Source
Groups properties by source, such as inheritance, applied styles, and bindings. Only available when editing XAML files in the designer.
Events
Displays the events for an object.
This Properties window toolbar control is only available when a form or control designer is active in the context of a Visual C# project. When editing XAML files, events appear on a separate tab of the properties window.
Messages
Lists all Windows messages. Allows you to add or delete specified handler functions for the messages provided for the selected class.
This Properties window toolbar control is only available when Class View is the active window in the context of a Visual C++ project.
Overrides
Lists all virtual functions for the selected class and allows you to add or delete overriding functions.
This Properties window toolbar control is only available when Class View is the active window in the context of a Visual C++ project.
Description pane
Shows the property type and a short description of the property. You can turn the description of the property off and on using the Description command on the shortcut menu.
This Properties window toolbar control is not available when editing XAML files in the designer.
Thumbnail view
Shows a visual representation of the currently selected element when editing XAML files in the designer.
Search
Provides a Search function for properties and events when editing XAML files in the designer. The search box responds to partial word searches and updates search results as you type.
See also
- Project Properties Reference
- Customizing window layouts
Окно Properties в Visual Studio

Одно из наиболее часто используемых инструментальных окон в системе Visual Studio 2013 — окно Properties ( F4 ), показанное на рисунке ниже. Окно Properties состоит из сетки свойств и является контекстно-зависимым, отображая только релевантные свойства выделенного элемента, независимо от того, является ли этот элемент узлом в окне Solution Explorer или элементом формы. Каждая строка отображает свойство, имеющее имя и соответствующее значение, записанные в двух столбцах. На рисунке ниже показана обновленная сетка свойств для приложений WPF, содержащая пиктограмму предварительного просмотра и возможности поиска.

Окно Properties позволяет группировать свойства или сортировать их по алфавиту. Это окно имеет встроенные редакторы для многих системных типов, таких как цвета, шрифты, якоря и стыковки, которые вызываются, когда вы щелкаете на столбце значений изменяемых свойств. Когда вы выбираете свойство его имя подсвечивается, а в левой области сетки свойств появляется его описание.
Для веб- и WPF-приложений набор свойств в окне Properties сохраняется в виде файлов разметки с расширением *.aspx или *.xaml соответственно. Как и в проектировщике форм Windows, в окне Properties отображаются только те свойства, которые постоянно хранятся в файле разметки.
Окно Properties предлагает средства для подключения обработчиков событий в виде кнопки со значком молнии в правом верхнем углу.
Расширение окна Properties
В проектах Window Forms система Visual Studio 2013 выделяет свойства, подлежащие изменению, полужирным шрифтом. У вас должен был возникнуть вопрос: откуда система Visual Studio 2013 знает, каким должно быть значение по умолчанию? Ответ заключается в том, что когда окно Properties просматривает объект, чтобы определить, какие свойства должны отражаться в сетке свойств, она перебирает большое количество атрибутов проекта. Эти атрибуты можно использовать для управления отображением свойств, выбора редактора, который должен использоваться для изменения значений, а также для выбора значения, заданного по умолчанию.
Для того чтобы показать, как можно использовать эти атрибуты для создания своих собственных компонентов, начнем с добавления простого элемента управления WPF, унаследованного от Button и имеющего одно автоматическое свойство:
using System.Windows.Controls; using System.ComponentModel; namespace GettingStarted < public class SampleButton : Button < public string Description < get; set; >> >
Давайте добавим этот элемент в окно MainWindow.xaml:
На рисунке ниже показано новое свойство Description в окне Properties. Чтобы быстрее его найти среди других свойств, я воспользовался поиском:

Атрибут Browsable
По умолчанию в сетке свойств отображаются все открытые свойства. Однако вы можете явно управлять его поведением, добавив атрибут Browsable (из пространства имен System.ComponentModel). Если вы установите это свойство равным false, то оно не будет показано в сетке свойств.
[Browsable(false)] public string Description
Атрибут DisplayName
Атрибут DisplayName вполне очевиден: он позволяет изменять имя свойства. В данном случае мы можем изменить имя свойства, которое появится в сетке свойств с Description на «Описание элемента управления»:
[DisplayName("Описание элемента управления")] public string Description

Атрибут Description
Кроме возможности задавать имя свойства по своему усмотрению, целесообразно также предоставлять описание, которое должно появляться в нижней части окна Properties, когда выбирается соответствующее свойство. Это гарантирует, что пользователи компонента знают его свойства.
[DisplayName("Описание элемента управления")] [Description("Мое первое свойство")] public string Description
Атрибут Category
По умолчанию любое видимое свойство размещается в группе Miscellaneous, если окно Properties имеет сгруппированное представление. Используя атрибут Category, вы сможете разместить ваше свойство в любой из существующих групп, таких как Appearance или Data, или в новой группе, если укажете имя группы, которой еще нет.
[Category("Text")] public string Description
Атрибут DefaultValue
Система Visual Studio 2013 выделяет свойства, которые были изменены по сравнению со своим начальным значением или значением, заданным по умолчанию. Атрибут DefaultValue определяет, как система Visual Studio 2013 выполняет поиск значений, заданных по умолчанию для указанного свойства.
[DefaultValue("")] public string Description
В данном случае, если значение свойства Description установлено равным «», система Visual Studio 2013 удаляет строку кода, которая устанавливает это свойство. Если вы изменили это свойство и хотите вернуть его первоначальное значение, щелкните правой кнопкой мыши в окне Properties и выполните команду Reset в контекстном меню.
Следует подчеркнуть, что атрибут DefaultValue не устанавливает начальное значение вашего свойства. Если вы задаете атрибут DefaultValue, то рекомендуется одновременно установить начальное значение точно так же, как и в предшествующем коде.
Атрибут AmbientValue
Одно из свойств, которое мы все принимаем как должное, но лишь некоторые действительно понимают до конца, — это концепция сочетаемости объекта с внешним окружением. Типичными примерами являются цвета и шрифты переднего и заднего плана: если их не установить явно в окне Properties, они наследуются, но не от базового класса, а от своих родительских элементов управления. Более широкое определение концепции сочетаемости трактует его как свойство, которое принимает свое значение от другого источника.
Как и атрибут DefaultValue, атрибут AmbientValue используется для того, чтобы служить индикатором для системы Visual Studio 2013, когда она не должна добавлять код в файл проектировщика. К сожалению, при работе со свойствами зависимости невозможно жестко задать в коде значение, с которым следует сравнивать текущее значение, поскольку оно зависит от значения, заданного в источнике свойств. Из-за этого, когда вы определяете атрибут AmbientValue, вы поручаете проектировщику искать функцию ShouldSerializePropertyName. В данном случае эта функция называется ShouldSerializeDescription, и этот метод вызывается для того, чтобы определить, следует ли хранить текущее значение свойства в исходном файле проектировщика.
using System.Windows.Controls; using System.ComponentModel; namespace GettingStarted < public class SampleButton : Button < const string defValue ; string defaultDesc = defValue; [AmbientValue(defValue)] public string Description < get < if (this.defaultDesc == defValue && this.Parent is TextBlock) return (Parent as TextBlock).Text; return defaultDesc; >set < defaultDesc = value; >> > >
Когда вы создаете элемент управления с данным свойством, начальное значение должно быть установлено равным константе DefaultDescription, но в проектировщике вы можете увидеть значение, соответствующее значению Parent.Text.
В этой и предыдущих статьях вы увидели в действии три основных инструментальных окна — Solution Explorer, Toolbox и Properties. Зная правила манипулирования этими окнами, вы сэкономите много времени на этапе разработки. Однако истинная мощь системы Visual Studio 2013 проявляется, когда вы начинаете инкорпорировать свой опыт разработчика в собственные компоненты. Это может оказаться полезным, даже если ваши компоненты будут использоваться только в вашей организации. Эффективно используя проектировщик, можно улучшить не только процесс проектирования с помощью собственных элементов управления, но и повысить производительность создаваемого приложения.
Управление свойствами проектов и решений
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
У проектов есть свойства, которые определяют различные аспекты компиляции, отладки, тестирования и развертывания. Некоторые свойства являются общими для всех типов проектов, а некоторые — уникальными для конкретных языков или платформ.
Доступ к свойствам проекта можно получить, щелкнув правой кнопкой мыши узел проекта в Обозреватель решений и выбрав «Свойства» или введя свойства в поле поиска в строке меню и выбрав окно свойств из результатов.


Проекты .NET также могут содержать узел свойств в дереве проекта.

Этот раздел относится к Visual Studio в Windows. Информацию о Visual Studio для Mac см. в статье Управление свойствами решения и проекта (Visual Studio для Mac).
Свойства проекта
Свойства проекта упорядочены по группам. У каждой группы есть собственная страница свойств. Страницы могут различаться для разных языков и типов проектов.
Проекты C#, Visual Basic и F#
В проектах C#, Visual Basic и F# свойства предоставляются в конструкторе проектов .NET.
На следующем снимке экрана показана страница свойств сборки в конструкторе проектов .NET для консольного проекта в C#:


На следующем снимке экрана показана страница свойства компиляции в конструкторе проектов .NET для консольного проекта в Visual Basic:


Дополнительные сведения о каждом из свойств конструктора проектов см. в разделе «Что такое конструктор проектов .NET».
Решения имеют несколько свойств и поэтому делают элементы проекта; Эти свойства доступны в окно свойств, а не в конструкторе проектов .NET.
Проекты C++ и JavaScript
Проекты C++ и JavaScript имеют другой пользовательский интерфейс для управления свойствами проекта. На следующем снимку экрана показана страница свойств проекта C++ (страницы JavaScript похожи):

Сведения о свойствах проекта C++ см. в разделе Работа со свойствами проектов (C++). Дополнительные сведения о свойствах JavaScript см. в разделе Страницы свойств (JavaScript).
Свойства решения
Чтобы получить доступ к свойствам решения, щелкните правой кнопкой мыши узел решения в Обозреватель решений и выберите «Свойства«. В открывшемся диалоговом окне можно задать параметры проекта для сборки отладки или выпуска, указать, какие проекты должны запускаться при нажатии клавиши F5, а также задать параметры анализа кода.
Свойства решения хранятся в файле параметров пользователя решения (SUO). Дополнительные сведения об этом типе файлов см. в разделе «Файл решения» на странице «Решения и проекты» на странице Visual Studio.
Связанный контент
- Что такое решения и проекты в Visual Studio?
- Управление свойствами решения и проекта (Visual Studio для Mac)
Настройка окно свойств
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Вы можете настроить внешний вид и поведение окна свойств на языке, определенном для домена (DSL), в Visual Studio. В определении DSL вы определяете свойства домена для каждого класса домена. По умолчанию при выборе экземпляра класса на схеме или в модели Обозреватель каждое свойство домена отображается в окне свойств. Это позволяет просматривать и изменять значения свойств домена, даже если они не сопоставлены с полями фигур на схеме.
Имена, описания и категории
Имя и отображаемое имя. В определении свойства домена отображаемое имя свойства — это имя, которое отображается во время выполнения в окне свойств. Напротив, имя используется при написании кода программы для обновления свойства. Имя должно быть правильным буквенно-цифровым именем СРЕДЫ CLR, но отображаемое имя может содержать пробелы.
При установке имени свойства в определении DSL его отображаемое имя автоматически устанавливается на копию имени. При написании регистрируемого имени Pascal, например «FuelGauge», отображаемое имя будет автоматически содержать пробел: «Датчик топлива». Однако вы можете явно задать отображаемое имя другим значением.
Описание. Описание свойства домена отображается в двух местах:
- В нижней части окна свойств, когда пользователь выбирает свойство. Его можно использовать для объяснения пользователю, что представляет свойство.
- В созданном коде программы. Если вы используете средства документации по API для извлечения документации по API, оно будет отображаться как описание этого свойства в API.
Категория. Категория — это заголовок в окно свойств.
Предоставление возможностей стиля
Некоторые динамические функции графических элементов могут представляться или предоставляться как свойства домена. Функция, которая была представлена таким образом, может быть обновлена пользователем и может быть легко обновлена кодом программы.
Щелкните правой кнопкой мыши класс фигуры в определении DSL, наведите указатель на добавление предоставляемых объектов и выберите функцию.
На фигурах можно предоставлять свойства FillColor, OutlineColor, TextColor, OutlineDashStyle, OutlineThickness и FillGradientMode. В соединителях можно предоставлять свойства Color , TextColor, DashStyle и Толщины. На схемах можно предоставить свойства FillColor и TextColor .
Пересылка: отображение свойств связанных элементов
Когда пользователь DSL выбирает элемент в модели, свойства этого элемента отображаются в окне свойств. Однако можно также отобразить свойства указанных связанных элементов. Это полезно, если вы определили группу элементов, которые работают вместе. Например, можно определить основной элемент и необязательный элемент подключаемого модуля. Если основной элемент сопоставляется с фигурой, а другой нет, полезно увидеть все их свойства, как если бы они были на одном элементе.
Этот эффект называется перенаправлением свойств, и это происходит автоматически в нескольких случаях. В других случаях можно добиться перенаправления свойств, определив дескриптор типа домена.
Варианты пересылки свойств по умолчанию
Когда пользователь выбирает фигуру или соединитель или элемент в Обозреватель, в окно свойств отображаются следующие свойства:
- Свойства домена, определенные в классе домена элемента модели, включая те, которые определены в базовых классах. Исключение — это свойства домена, для которых задано значение «Просмотр». False
- Имена элементов, связанных через связи с кратностью 0.1. Это обеспечивает удобный способ просмотра необязательных связанных элементов, даже если вы не определили сопоставление соединителей для связи.
- Свойства домена для связи внедрения, предназначенной для элемента. Так как отношения внедрения обычно не отображаются явным образом, это позволяет пользователю видеть их свойства.
- Свойства домена, определенные на выбранной фигуре или соединителе.
Добавление перенаправления свойств
Чтобы перенаправить свойство, определите дескриптор типа домена. Если у вас есть отношение к домену между двумя классами домена, можно использовать дескриптор типа домена, чтобы задать свойство домена в первом классе значение свойства домена во втором классе домена. Например, если у вас есть связь между классом домена Book и классом домена Author, можно использовать дескриптор типа домена, чтобы сделать свойство Name автора книги отображается в окно свойств, когда пользователь выбирает книгу.
Переадресация свойств влияет только на окно свойств, когда пользователь редактируется модель. Он не определяет свойство домена в принимающем классе. Если вы хотите получить доступ к свойству пересылаемого домена в других частях определения DSL или в коде программы, необходимо получить доступ к элементу пересылки.
В следующей процедуре предполагается, что вы создали DSL. Первые несколько шагов обобщают предварительные требования.
Переадресация свойства из другого элемента
- Создайте решение для языка для конкретного домена, содержащее по крайней мере два класса, которые в этом примере называются книгой и автором. Между книгой и автором должна быть связь любого вида. Кратность исходной роли (роль на стороне книги ) должна быть 0.1 или 1.1, чтобы каждая книга была одним автором.
- В Обозреватель DSL щелкните правой кнопкой мыши класс домена Book, а затем нажмите кнопку Add New DomainTypeDescriptor. Узел с именем Paths of Custom Property Descriptors отображается под узлом дескриптора пользовательского типа.
- Щелкните правой кнопкой мыши узел дескриптора пользовательского типа и нажмите кнопку «Добавить новое свойствоPath«. Новый путь к свойству отображается в узле «Пути пользовательских дескрипторов свойств».
- Выберите новый путь к свойству, а в окне «Свойства » задайте для свойства путь к соответствующему элементу модели. Путь можно изменить в представлении дерева, щелкнув стрелку вниз справа от этого свойства. Дополнительные сведения о путях к домену см. в разделе «Синтаксис пути к домену». Когда вы редактировали его, путь должен выглядеть как BookReferencesAuthor.Author/! Автор.
- Задайте свойству «Имя домена» объекта Author.
- Задайте отображаемое имя для имени автора.
- Преобразование всех шаблонов, сборка и запуск DSL.
- На схеме модели создайте книгу, автора и свяжите их с помощью ссылочной связи. Выберите элемент книги, а в окно свойств вы увидите имя автора в дополнение к свойствам книги. Измените имя связанного автора или свяжите книгу с другим автором и обратите внимание, что имя автора книги изменяется.
Редакторы настраиваемых свойств
Окно свойств предоставляет соответствующий интерфейс редактирования по умолчанию для типа каждого свойства домена. Например, для перечисленного типа пользователь видит раскрывающийся список, а для числового свойства пользователь может ввести цифры. Это верно только для встроенных типов. Если указать внешний тип, пользователь сможет просмотреть значения свойства, но не изменять его.
Однако можно указать следующие редакторы и типы:
- Другой редактор, используемый со стандартным типом. Например, можно указать редактор пути к файлу для свойства строки.
- Внешний тип для свойства домена и редактор для него.
- Редактор .NET, например редактор пути к файлу или можно создать собственный редактор настраиваемых свойств. Преобразование между внешним типом и типом, таким как String, который имеет редактор по умолчанию. В DSL внешний тип — это любой тип , который не является одним из простых типов (например, boolean или Int32) или String.
Определение свойства домена с внешним типом
- В Обозреватель решений добавьте ссылку на сборку (DLL), содержащую внешний тип в проекте Dsl. Сборка может быть сборкой .NET или сборкой, предоставленной вами.
- Добавьте тип в список типов доменов , если это еще не сделано.
- Откройте dslDefinition.dsl и в Обозреватель DSL щелкните правой кнопкой мыши корневой узел и нажмите кнопку «Добавить новый внешний тип«. Новая запись появится в узле «Типы доменов «.
Предупреждение Элемент меню находится на корневом узле DSL, а не на узле типов доменов .
Установка редактора свойств
Добавьте атрибут CLR в свойство домена в следующей форме:
[System.ComponentModel.Editor ( typeof(AnEditor), typeof(System.Drawing.Design.UITypeEditor))]Атрибут можно задать для свойства с помощью записи пользовательского атрибута в окно свойств.
Тип AnEditor должен быть производным от типа, указанного во втором параметре. Второй параметр должен быть либоUITypeEditor.ComponentEditor Дополнительные сведения см. в разделе EditorAttribute.
Вы можете указать собственный редактор или редактор .NET, например FileNameEditor или ImageEditor. Например, используйте следующую процедуру, чтобы иметь свойство, в котором пользователь может ввести имя файла.
Определение свойства домена имени файла
- Добавьте свойство домена в класс домена в определении DSL.
- Выберите новое свойство. В поле «Настраиваемый атрибут» в окно свойств введите следующий атрибут. Чтобы ввести этот атрибут, щелкните многоточие [. ], а затем введите имя атрибута и параметры отдельно:
[System.ComponentModel.Editor ( typeof(System.Windows.Forms.Design.FileNameEditor) , typeof(System.Drawing.Design.UITypeEditor))]- Нажмите клавиши CTRL+F5 или F5. В решении отладки откройте тестовый файл. Создайте элемент класса домена и выберите его.
- В окно свойств выберите свойство домена. Поле значения показывает многоточие [. ].
- Щелкните многоточие. Откроется диалоговое окно файла. Выберите файл и закройте диалоговое окно. Путь к файлу теперь является значением свойства домена.
Определение собственного редактора свойств
Вы можете определить собственный редактор. Это позволит пользователю изменять определенный тип или изменять стандартный тип особым образом. Например, можно разрешить пользователю вводить строку, представляющую формулу.
Вы определяете редактор, написав класс, производный от UITypeEditor. Класс должен переопределить:
- EditValue, чтобы взаимодействовать с пользователем и обновлять значение свойства.
- GetEditStyle, чтобы указать, откроется ли в редакторе диалоговое окно или в раскрывающемся меню.
Вы также можете предоставить графическое представление значения свойства, которое будет отображаться в сетке свойств. Для этого переопределите GetPaintValueSupported и PaintValue . Дополнительные сведения см. в разделе UITypeEditor.
Добавьте код в отдельный файл кода в проекте Dsl .
internal class TextFileNameEditor : System.Windows.Forms.Design.FileNameEditor < protected override void InitializeDialog(System.Windows.Forms.OpenFileDialog openFileDialog) < base.InitializeDialog(openFileDialog); openFileDialog.Filter = "Text files(*.txt)|*.txt|All files (*.*)|*.*"; openFileDialog.Title = "Select a text file"; >>Чтобы использовать этот редактор, задайте для пользовательского атрибута свойства домена следующее:
[System.ComponentModel.Editor ( typeof(MyNamespace.TextFileNameEditor) , typeof(System.Drawing.Design.UITypeEditor))]Дополнительные сведения см. в разделе UITypeEditor.
Укажите раскрывающийся список значений
Список значений для пользователя можно указать.
Этот метод содержит список значений, которые могут изменяться во время выполнения. Если вы хотите указать список, который не изменяется, рекомендуется использовать перечислимый тип в качестве типа свойства домена.
Чтобы определить список стандартных значений, добавьте в свойство домена атрибут CLR, имеющий следующую форму:
[System.ComponentModel.TypeConverter (typeof(MyTypeConverter))]Определите класс, производный от класса TypeConverter. Добавьте код в отдельный файл в проекте Dsl . Например:
////// Type converter that provides a list of values /// to be displayed in the property grid. /// ///This type converter returns a list /// of the names of all "ExampleElements" in the /// current store. public class MyTypeConverter : System.ComponentModel.TypeConverter < ////// Return true to indicate that we return a list of values to choose from /// /// public override bool GetStandardValuesSupported (System.ComponentModel.ITypeDescriptorContext context) < return true; >////// Returns true to indicate that the user has /// to select a value from the list /// /// ///If we returned false, the user would /// be able to either select a value from /// the list or type in a value that is not in the list. public override bool GetStandardValuesExclusive (System.ComponentModel.ITypeDescriptorContext context) < return true; >////// Return a list of the values to display in the grid /// /// ///A list of values the user can choose from public override StandardValuesCollection GetStandardValues (System.ComponentModel.ITypeDescriptorContext context) < // Try to get a store from the current context // "context.Instance" returns the element(s) that // are currently selected i.e. whose values are being // shown in the property grid. // Note that the user could have selected multiple objects, // in which case context.Instance will be an array. Store store = GetStore(context.Instance); Listvalues = new List(); if (store != null) < values.AddRange(store.ElementDirectory .FindElements() .Select(e => < return e.Name; >)); > return new StandardValuesCollection(values); > ////// Attempts to get to a store from the currently selected object(s) /// in the property grid. /// private Store GetStore(object gridSelection) < // We assume that "instance" will either be a single model element, or // an array of model elements (if multiple items are selected). ModelElement currentElement = null; object[] objects = gridSelection as object[]; if (objects != null && objects.Length >0) < currentElement = objects[0] as ModelElement; >else < currentElement = gridSelection as ModelElement; >return (currentElement == null) ? null : currentElement.Store; > >Связанный контент