DependencyProperty Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет свойство зависимостей, зарегистрированное в системе свойств зависимостей. Свойства зависимостей обеспечивают поддержку выражений значений, привязки данных, анимации и уведомления об изменении свойств. Дополнительные сведения о том, как значения DependencyProperty служат идентификаторами для свойств зависимостей, см. в статье Общие сведения о свойствах зависимостей.
public ref class DependencyProperty sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DependencyProperty final
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DependencyProperty
Public NotInheritable Class DependencyProperty
- Наследование
- Атрибуты
Примеры
В этом примере показано базовое использование, при котором DependencyProperty
устанавливается в качестве общедоступного статического члена класса. Для этого вызов метода Register и сохранение возвращаемого значения в качестве члена класса . Дополнительные примеры см. в разделе Пользовательские свойства зависимостей.
public class Fish : Control
{
public static readonly DependencyProperty SpeciesProperty =
DependencyProperty.Register(
"Species",
typeof(String),
typeof(Fish), null
);
public string Species
{
get { return (string)GetValue(SpeciesProperty); }
set { SetValue(SpeciesProperty, (string)value); }
}
}
Пример расширений компонентов Visual C++ (C++/CX) здесь не показан, так как он должен учитываться совершенно иначе, чем в примерах Microsoft .NET, и включает несколько разных файлов кода. См. примеры в разделе Пользовательские свойства зависимостей.
Комментарии
Основные понятия свойств зависимостей подробно рассматриваются в разделе Общие сведения о свойствах зависимостей.
Экземпляры DependencyProperty
часто упоминаются в документации как идентификаторы свойств зависимостей. Идентификаторы позволяют ссылаться на свойство зависимостей, зарегистрированное для определенного типа владельца DependencyObject . Когда тип владельца регистрирует свойство, тип владельца предоставляет экземпляр в DependencyProperty
качестве идентификатора, который является статическим членом класса владельца.
Объект DependencyObject владельца предоставляет хранилище свойств для свойства зависимостей. При работе со свойством зависимостей в коде можно использовать DependencyProperty
идентификаторы в качестве входных данных для вызовов системных методов свойств, таких как SetValue. Однако в большинстве случаев получить или задать свойство зависимостей проще, получив или задав оболочку. Эта концепция описана в статье Общие сведения о свойствах зависимостей.
DependencyProperty
поддерживает собственное преобразование синтаксиса атрибутов XAML для заполнения значений, которое используется, когда метод задания задает значение свойства . Это преобразование использует форму ownerTypeName**.**propertyName для входной строки.
Примечание
Связанный синтаксис, который также можно использовать для указания свойства по имени и требуется для определенных ДАННЫХ и API анимации, является синтаксисом пути к свойству. Путь к свойству можно использовать для ссылки на структуру класса, который имеет свойства, и значение этого свойства. Дополнительные сведения см. в разделе Синтаксис Property-path.
Совет
При программировании на языке Microsoft .NET (C# или Microsoft Visual Basic) тип TypeName проектируются как System.Type. При программировании на C# оператор обычно используется для typeof
получения ссылок на System.Type типа. В Microsoft Visual Basic используйте .GetType
Если вы используете расширения компонентов Visual C++ (C++/CX)), где необходимо создать вспомогательную структуру TypeName , можно использовать расширение компонента typeid.
В среда выполнения Windows реализована функция языка присоединенных свойств XAML с DependencyProperty
идентификаторами и хранилищем свойств в DependencyObject. Подробнее см. в разделе Общие сведения о присоединенных свойствах.
Пользовательские свойства зависимостей
Если вы хотите, чтобы свойства пользовательских типов поддерживали выражения значений, привязку данных или анимацию, следует вернуть свойства с помощью свойства зависимостей, следуя приведенным ниже рекомендациям.
- Зарегистрируйте свойство зависимостей с помощью метода Register , который возвращает
DependencyProperty
. Это идентификатор свойства зависимостей. Этот объект следует предоставлять в классе как доступное статическое свойство только для чтения. По соглашению имя этогоDependencyProperty
поля идентификатора должно заканчиваться на "Свойство". - Во время регистрации можно указать PropertyMetadata для свойства, чтобы дополнительно определить поведение свойства.
- Укажите
get
методы доступа иset
для свойства. Это оболочки свойства, которые упростят доступ к свойству для всех вызывающих объектов.
Ссылки XAML на имя свойства зависимостей
Некоторые свойства, которые обычно задаются в разметке XAML, используют DependencyProperty
в качестве значения. Например, вы задали Setter.Property в XAML. Чтобы задать такое свойство в XAML, необходимо указать имя свойства зависимостей в качестве значения атрибута.
Для Setter.Property тип, из которого вы ссылаетесь на имя свойства зависимостей, уже ограничен типом TargetTypeстиля , в котором существует метод задания . Для свойства зависимостей объекта TargetType можно указать значение Setter.Property , используя простое имя свойства зависимостей. Например, если у вас есть стиль , предназначенный для ползунка, и вы хотите задать стиль для свойства Orientation , значение атрибута Property может быть просто "Orientation". Простые имена также работают до тех пор, пока свойство зависимостей поступило из класса в более глубоком наследовании целевого типа. Например, чтобы изменить стиль свойства Visibility в style для ползунка, будет работать значение атрибута Property "Visibility". В этом случае видимость была определена uiElement, но наследуется ползунку.
Вы также можете использовать Setter.Property для ссылки на имя присоединенного свойства. Для значения атрибута используйте форму AttachedPropertyOwner.AttachedPropertyName так же, как и для задания присоединенного свойства в качестве атрибута в XAML. Например, вот метод задания , который задает присоединенное свойство AutomationProperties.ItemType в стиле: <Setter Property="AutomationProperties.ItemType" Value="Navigation Button"/>
Примечание
Имя свойства зависимостей не является именем идентификатора DependencyProperty
статического свойства. Это строка имени, в которой зарегистрировано свойство, и имя, которое является типичным именем использования этого свойства в программировании среда выполнения Windows при использовании Microsoft IntelliSense и справочной документации. Иными словами, вы не хотите, чтобы строка, указанная для Setter.Property в XAML, заканчивалася на "Property" (за исключением нескольких редких случаев, когда свойство зависимостей фактически содержит суффикс "Property").
Использование DependencyProperty (идентификатор свойства зависимостей) в коде
Существует несколько методов, которые являются служебными методами для системы свойств среда выполнения Windows, которые используют DependencyProperty
значение в качестве входного параметра. К ним относятся следующие объекты.
- DependencyObject.ClearValue
- DependencyObject.GetAnimationBaseValue
- DependencyObject.GetValue
- DependencyObject.ReadLocalValue
- DependencyObject.SetValue
- DependencyPropertyChangedEventArgs.Property
- Конструктор Setter(DependencyProperty,Object)
Свойства
UnsetValue |
Задает статическое значение, которое используется системой свойств, а не |
Методы
GetMetadata(TypeName) |
Извлекает значение метаданных свойства для свойства зависимостей, зарегистрированного в типе. Вы указываете тип, из которого вы хотите получить сведения, в качестве ссылки на тип. |
Register(String, TypeName, TypeName, PropertyMetadata) |
Регистрирует свойство зависимостей с указанным именем свойства, типом свойства, типом владельца и метаданными свойства для свойства. Используйте этот метод при определении или инициализации производного класса DependencyObject , которому будет принадлежать зарегистрированное свойство зависимости. |
RegisterAttached(String, TypeName, TypeName, PropertyMetadata) |
Регистрирует присоединенное свойство зависимостей с указанным именем свойства, типом свойства, типом владельца и метаданными свойства для свойства. |