2011-03-10 69 views
10

我有一类附加属性:附加属性为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上,如果它很重要。

回答

5

如果你使用语法你需要指定类型:

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

凡SYS命名空间映射到系统。您还需要定义的getFoo ...

可能是一个复制粘贴错字,但在注册

typeof(XamlActions) 

应该

typeof(XamlProps) 
+0

这工作就像一个魅力。非常感谢 – Hounshell 2011-03-11 18:35:40

+0

有没有办法将其包装在? – Hounshell 2011-03-11 18:51:23

+0

似乎并不是:http://stackoverflow.com/questions/4048223/silverlight-xaml-textblock-text-with-cdata-not-showing-up-at-runtime – Damian 2011-03-11 19:51:09

1

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

您应该在DependencyProperty中定义一个PropertyChangedCallback。致电Register通知变更。

+0

我不依赖于SetFoo( )除了在这种情况下被调用以便逐步查看它是否被设置。最终我实际上并不想对这些做出改变。这是一种初始行为,不是持续的。 – Hounshell 2011-03-11 17:55:12

+0

好吧,但除非您明确调用SetFoo,否则不保证它将通过XAML调用。 – CodeNaked 2011-03-11 18:17:30