我有一类附加属性:
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上。
答案 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,以便收到更改通知。