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


DependencyProperty Класс

Определение

Представляет свойство зависимостей, зарегистрированное в системе свойств зависимостей. Свойства зависимостей обеспечивают поддержку выражений значений, привязки данных, анимации и уведомления об изменении свойств. Дополнительные сведения о том, как значения DependencyProperty служат идентификаторами для свойств зависимостей, см. в статье Общие сведения о свойствах зависимостей.

public ref class DependencyProperty sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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(Windows.Foundation.UniversalApiContract), 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
See Remarks
Наследование
Object Platform::Object IInspectable DependencyProperty
Атрибуты

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v1.0)

Примеры

В этом примере показано базовое использование, при котором 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); }
    }
}
Public Class Fish
    Inherits Control

    Public Shared ReadOnly SpeciesProperty As DependencyProperty = _
    DependencyProperty.Register(
    "Species", _
    GetType(String), _
    GetType(Fish), _
    Nothing)
    Public Property Species As String
        Get
            Species = CType(GetValue(SpeciesProperty), String)
        End Get
        Set(value As String)
            SetValue(SpeciesProperty, value)
        End Set
    End Property
End Class

Пример расширений компонентов 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 должно заканчиваться на "Property".
  • Во время регистрации можно указать 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 в качестве входного параметра. К ним относятся следующие объекты.

Свойства

UnsetValue

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

Методы

GetMetadata(TypeName)

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

Register(String, TypeName, TypeName, PropertyMetadata)

Регистрирует свойство зависимостей с указанным именем свойства, типом свойства, типом владельца и метаданными свойства для свойства. Используйте этот метод при определении или инициализации производного класса DependencyObject , которому будет принадлежать зарегистрированное свойство зависимости.

RegisterAttached(String, TypeName, TypeName, PropertyMetadata)

Регистрирует присоединенное свойство зависимостей с указанным именем свойства, типом свойства, типом владельца и метаданными свойства для свойства.

Применяется к

См. также раздел