Присоединенные свойства
Присоединенные свойства позволяют объекту назначать значение для свойства, которое его собственный класс не определяет. Например, дочерние элементы могут использовать присоединенные свойства для информирования родительского элемента о том, как они должны быть представлены в пользовательском интерфейсе. Элемент Grid
управления позволяет указать строку и столбец дочернего элемента, задав и Grid.Column
присоединенные Grid.Row
свойства. Grid.Row
и Grid.Column
являются присоединенными свойствами, так как они задаются на элементах, которые являются дочерними элементами Grid
, а не сами по Grid
себе.
Привязываемые свойства должны быть реализованы как присоединенные свойства в следующих сценариях:
- Если необходимо иметь механизм настройки свойств, доступный для классов, отличных от определяющего класса.
- Когда класс представляет службу, которую необходимо легко интегрировать с другими классами.
Дополнительные сведения о привязываемых свойствах см. в разделе "Привязываемые свойства".
Создание присоединенного свойства
Процесс создания присоединенного свойства выглядит следующим образом:
BindableProperty
Создайте экземпляр с одной изCreateAttached
перегрузок метода.- Предоставьте
static
Get
методы PropertyName иSet
PropertyName в качестве методов доступа для присоединенного свойства.
Создание свойства
При создании присоединенного свойства для использования в других типах класс, от которого создается свойство, не требуется.BindableObject
Однако целевое свойство для методов доступа должно быть производным или производным от. BindableObject
Присоединенное свойство можно создать, объявив public static readonly
свойство типа BindableProperty
. Привязываемое свойство должно быть задано возвращаемым значением одной из BindableProperty.CreateAttached
перегрузок метода. Объявление должно находиться в теле собственного класса, но за пределами определений элементов.
Внимание
Соглашение об именовании присоединенных свойств заключается в том, что идентификатор присоединенного свойства должен соответствовать имени свойства, указанному в методе CreateAttached
, с добавлением свойства к нему.
В следующем коде показан пример присоединенного свойства:
public static readonly BindableProperty HasShadowProperty =
BindableProperty.CreateAttached ("HasShadow", typeof(bool), typeof(ShadowEffect), false);
При этом создается присоединенное свойство с именем HasShadowProperty
типа bool
. Свойство принадлежит классу ShadowEffect
и имеет значение false
по умолчанию.
Дополнительные сведения о создании привязываемых свойств, включая параметры, которые можно указать во время создания, см. в разделе "Создание привязываемого свойства".
Создание методов доступа
Методы Static Get
PropertyName и Set
PropertyName требуются в качестве методов доступа для присоединенного свойства, в противном случае система свойств не сможет использовать присоединенное свойство. Метод Get
доступа PropertyName должен соответствовать следующей подписи:
public static valueType GetPropertyName(BindableObject target)
Метод Get
доступа PropertyName должен возвращать значение, содержащееся в соответствующем BindableProperty
поле для присоединенного свойства. Это можно сделать путем вызова GetValue
метода, передачи идентификатора привязываемого свойства, для которого требуется получить значение, а затем приведения результирующего значения к требуемому типу.
Метод Set
доступа PropertyName должен соответствовать следующей подписи:
public static void SetPropertyName(BindableObject target, valueType value)
Метод Set
доступа PropertyName должен задать значение соответствующего BindableProperty
поля для присоединенного свойства. Это можно добиться, вызвав SetValue
метод, передав идентификатор привязываемого свойства, для которого необходимо задать значение, и значение, которое необходимо задать.
Для обоих методов доступа целевой объект должен быть или производным от. BindableObject
В следующем примере кода показаны методы доступа для присоединенного HasShadow
свойства:
public static bool GetHasShadow (BindableObject view)
{
return (bool)view.GetValue (HasShadowProperty);
}
public static void SetHasShadow (BindableObject view, bool value)
{
view.SetValue (HasShadowProperty, value);
}
Использование присоединенного свойства
После создания присоединенного свойства его можно использовать из XAML или кода. В XAML это достигается путем объявления пространства имен с префиксом, с объявлением пространства имен, указывающим имя пространства имен CLR и необязательно имя сборки. Дополнительные сведения см. в разделе "Пространства имен XAML".
В следующем примере кода демонстрируется пространство имен XAML для пользовательского типа, содержащего присоединенное свойство, которое определяется в той же сборке, что и код приложения, ссылающийся на пользовательский тип:
<ContentPage ... xmlns:local="clr-namespace:EffectsDemo" ...>
...
</ContentPage>
Затем объявление пространства имен используется при настройке присоединенного свойства для определенного элемента управления, как показано в следующем примере кода XAML:
<Label Text="Label Shadow Effect" local:ShadowEffect.HasShadow="true" />
Эквивалентный код на языке C# показан в следующем примере:
var label = new Label { Text = "Label Shadow Effect" };
ShadowEffect.SetHasShadow (label, true);
Использование присоединенного свойства со стилем
Присоединенные свойства также можно добавить в элемент управления по стилю. В следующем примере кода XAML показан явный стиль, использующий HasShadow
присоединенное свойство, которое можно применить к Label
элементам управления:
<Style x:Key="ShadowEffectStyle" TargetType="Label">
<Style.Setters>
<Setter Property="local:ShadowEffect.HasShadow" Value="true" />
</Style.Setters>
</Style>
Чтобы применить класс Style
к классу Label
, его свойству Style
следует задать значение экземпляра Style
с помощью расширения разметки StaticResource
, как показано в следующем примере кода.
<Label Text="Label Shadow Effect" Style="{StaticResource ShadowEffectStyle}" />
Дополнительные сведения о стилях см. в статье Стили .
Расширенные сценарии
При создании присоединенного свойства есть ряд необязательных параметров, которые можно задать для включения сценариев расширенных присоединенных свойств. К ним относятся обнаружение изменений свойств, проверка значений свойств и принудительное выполнение значений свойств. Дополнительные сведения см. в дополнительных сценариях.