2011-03-10 24 views
10

gibi ekli özelliklerinin bir sınıf var:Ekli Özellikleri XAML Elemanları

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

Ve ben XAML bu özellikleri kullanın:

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

Ama şimdi bu daha büyük bir değere istiyorum

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

Ama şimdi Silverlight() artık SetFoo çağırmaz: özellik, bu yüzden bir unsuru olarak kullanmak istiyorum. Bunu nasıl çalışırım?

Önemliyse Windows Phone 7'de.

cevap

5
o sözdizimi kullanırsanız türünü belirtmek gerekir

: Sistemine

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

sys ad haritalar. Ayrıca Sen SetFoo güvenmemelisiniz

typeof(XamlProps) 
+0

Bu bir çekicilik gibi çalıştı. Çok teşekkürler – Hounshell

+0

'da bunu sarmanın bir yolu var mı? – Hounshell

+0

olmak görünmüyor: http://stackoverflow.com/questions/4048223/silverlight-xaml-textblock-text-with-cdata-not-showing-up-at-runtime Ben SetFoo bağlı olmayan – Damian

1

çağrılan olmalıdır Muhtemelen kopyalama yapıştırma yazım hatası, ancak kayıt

typeof(XamlActions) 

yılında

GetFoo ...

tanımlamanız gerekir. Her şey SetValue (FooProperty, "blah") olarak adlandırılabilir ve atlayabilir.

Sen DependencyProperty bir PropertyChangedCallback tanımlamalıdır. Değişikliklerden haberdar olmak için Register numaralı telefonu arayın.

+0

() bu durumun dışında, çağrıldığını görmek için adım atmak için çağrılır. Ve sonuçta bunlar üzerinde değişiklik yapmak istemiyorum. Bu, başlangıçtaki bir şey değil, devam eden bir şey. – Hounshell

+0

Tamam, ama açıkça SetFoo çağırıyorsanız, XAML ile çağrılacak hiçbir garanti yoktur. – CodeNaked