Прикрепленные свойства как элементы XAML

У меня есть класс прикрепленных свойств:

public static class XamlProps
{
    #region Attached Properties

    private static readonly DependencyProperty FooProperty = DependencyProperty.RegisterAttached(
        "Foo",
        typeof(string),
        typeof(XamlProps),
        null);

    public static void SetFoo(DependencyObject obj, string action)
    {
        obj.SetValue(FooProperty, action);
    }
}

И я использую эти свойства в своем XAML:

<Border me:XamlProps.Foo="Foo to the Bar">

Но теперь я хочу получить большее значение в этом свойстве, поэтому я хотел бы использовать его как элемент:

<Border>
    <me:XamlProps.Foo>Foo to the Bar</me:XamlProps.Foo>
</Border>

Но теперь Silverlight больше не вызывает SetFoo(). Как я могу заставить это работать?

В Windows Phone 7, если это имеет значение.

Ответ 1

Вам нужно указать тип, если вы используете этот синтаксис:

<Border>
    <me:XamlProps.Foo>
        <sys:String>Foo to the Bar</sys:String>
    </me:XamlProps.Foo>
</Border>

Где пространство имен sys отображается в Системе. Вам также необходимо определить GetFoo...

Вероятно, опечатка с копией, но в регистрации

typeof(XamlActions)

должен быть

typeof(XamlProps)

Ответ 2

Вы никогда не должны полагаться на вызываемый SetFoo. Все может просто вызвать SetValue (FooProperty, "blah" ) и обойти его.

Вы должны определить PropertyChangedCallback в DependencyProperty. Register, чтобы получать уведомления об изменениях.