2010-10-15 4 views
0

MS определяет прикрепленные свойства, такие как «Grid.RowProperty» и «Grid.ColumnProperty», но в XAML вы просто называете это «Grid.Row» и «Grid.Column»Прилагаемые свойства в XAML без слова «Свойство»

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

+1

вы можете поделиться фрагментом кода ...? –

ответ

2

В фоне вот как register an attached property

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, а возвращаемое значение должно быть установлено на общедоступную статическую переменную с именем [Свойство Name]. Во-вторых, первый аргумент при регистрации вашей собственности должен быть «[Property Name]». И третий метод Get/Set, который вы будете использовать для взаимодействия с внешним миром, который должен называться Get [Property Name], Set [Property Name].

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

+0

Ха! Я думал, что зарегистрировал его правильно. Я сделал это, но случайно использовал неправильное имя в статических вызовах GetXxx/SetXxx (у меня был GetXxxProperty/SetXxxProperty). Надзор с моей стороны. Отмечено как ответ. – MarqueIV

+0

Кстати, вы сказали: «Вы также можете использовать стандартный формат свойств, а не конструкцию Set/Get». Не думал, что вы можете сделать это с прикрепленными свойствами. Есть пример? – MarqueIV

+0

Хмм, я думаю, вы можете, но я не нашел примеров в коде, который у меня есть для меня. Конечно, я не слишком часто использую прикрепленные свойства, поэтому я просто придерживаюсь того, что работает. –