Прикрепленные свойства как элементы XAML - PullRequest
10 голосов
/ 11 марта 2011

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

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, если это имеет значение.

Ответы [ 2 ]

5 голосов
/ 11 марта 2011

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

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

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

Возможно, опечатка, но в регистрации

typeof(XamlActions)

должно быть

typeof(XamlProps)
1 голос
/ 11 марта 2011

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

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

...