附加属性作为XAML元素

时间:2011-03-10 23:14:00

标签: c# silverlight xaml windows-phone-7

我有一类附加属性:

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 个答案:

答案 0 :(得分:5)

如果使用该语法,则需要指定类型:

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

sys命名空间映射到System的位置。您还需要定义GetFoo ...

可能是复制粘贴错误,但在注册

typeof(XamlActions)

应该是

typeof(XamlProps)

答案 1 :(得分:1)

你永远不应该依赖被调用的SetFoo。任何东西都可以简单地调用SetValue(FooProperty,“blah”)并绕过它。

您应该在DependencyProperty。PropertyChangedCallback调用中定义Register,以便收到更改通知。