2011-03-10 11 views
10

Tengo una clase de propiedades adjuntas:propiedades adjuntas como XAML Elementos

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); 
    } 
} 

Y utilizan estas propiedades en mi XAML:

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

pero ahora quiero un valor mayor en este propiedad, por lo que me gustaría utilizarlo como un elemento:

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

Pero ahora Silverlight no llama setFoo() nunca más. ¿Cómo hago que esto funcione?

En Windows Phone 7, si es importante.

Respuesta

5

Tendrá que especificar el tipo si se utiliza la sintaxis:

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

donde los mapas sys espacio de nombres al sistema. También es necesario definir getFoo ...

Probablemente un error de copiar y pegar, pero en el registro

typeof(XamlActions) 

debe ser

typeof(XamlProps) 
+0

Esto funcionó como un encanto. Muchas gracias – Hounshell

+0

¿Hay alguna manera de envolver esto en un ? – Hounshell

+0

No parece ser: http://stackoverflow.com/questions/4048223/silverlight-xaml-textblock-text-with-cdata-not-showing-up-at-runtime – Damian

1

Nunca se debe confiar en la setFoo ser llamado. Todo puede simplemente llamar a SetValue (FooProperty, "blah") y omitirlo.

Debe definir un PropertyChangedCallback en su DependencyProperty. Register llamada para recibir notificaciones de cambios.

+0

No dependo de SetFoo () se llama, excepto en este caso para ver si está configurado. Y, finalmente, en realidad no quiero cambios en estos. Esto es algo de comportamiento inicial, no continuo. – Hounshell

+0

Ok, pero a menos que esté llamando explícitamente a SetFoo, no hay garantías de que se llame a través de XAML. – CodeNaked

Cuestiones relacionadas