Прикрепленные свойства в XAML без слова "Property"

MS определяет присоединенные свойства, такие как "Grid.RowProperty" и "Grid.ColumnProperty", но в XAML вы просто вызываете его с помощью "Grid.Row" и "Grid.Column".

Я попытался сделать то же самое с присоединенным свойством MyValProperty, которое было зарегистрировано с именем MyVal в классе "Foo", но XAML не позволил мне ввести "Foo.MyVal", а вместо этого заставило меня ввести "Foo"..MyValProperty'Как MS делает это? Что мне не хватает?

1 ответ

Решение

В качестве фона вот как зарегистрировать прикрепленное свойство

public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(
    "IsBubbleSource",
    typeof(Boolean),
    typeof(AquariumObject),
    new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)
);
public static void SetIsBubbleSource(UIElement element, Boolean value)
{
    element.SetValue(IsBubbleSourceProperty, value);
}
public static Boolean GetIsBubbleSource(UIElement element)
{
    return (Boolean)element.GetValue(IsBubbleSourceProperty);
}

Вы также можете использовать стандартный формат свойства, а не конструкцию Set/Get. Это одна из тех областей, где в WPF действует строгое соглашение. Есть три части AttachedProperty (или любой DependencyProperty). Во-первых, регистрация собственности с DependencyProperty.RegisterAttached и возвращаемое значение должно быть установлено в публичную статическую переменную с именем [Property Name]Property. Во-вторых, первый аргумент при регистрации вашей собственности должен быть "[Имя свойства]". И третье - это методы Get/Set, которые вы будете использовать для взаимодействия с внешним миром, которые должны называться Get[Property Name], Set[Property Name].

Если вы настроите его в соответствии с соглашением, WPF распознает, что оба подключены, и позволит вам использовать свойство так, как вы ожидаете.

Другие вопросы по тегам