2011-01-07 3 views
11

Betrachten Sie das folgende XAMLangeben, welche Eigenschaft zwischen dem Öffnen und Schließen-Tag in XAML

<Grid> 
    <TextBox>Text</TextBox> 
    <Button>Content</Button> 
</Grid> 

geht es wird festgelegt, die

  • Text-Eigenschaft eines TextBox (nur WPF)
  • Inhaltseigenschaft eines Buttons
  • Kinder Eigenschaft eines Gitters

Aber wie ist das spezifiziert? Wie geben Sie an, welche Eigenschaft zwischen dem öffnenden und schließenden Tag in Xaml liegt?
Wird dies durch einige Metadaten in der Dependency-Eigenschaft oder was?

Dank

+1

das ist eine gute Frage, ich fragte mich auch darüber. – VoodooChild

+0

Nur ein Punkt der Tatsache, die Sie tatsächlich mit einer 'TextBox' nicht tun können. – AnthonyWJones

+0

@AnthonyWJones: ' Text' funktioniert gut. Was meinen Sie? Wenn ich TextBox.cs mit Reflector betrachte, kann ich sehen, dass 'ContentProperty (" Text ")' –

Antwort

17

Es gibt eine ContentPropertyAttribute, die auf eine Klasse angewendet wird. WPF/Silverlight verwendet Reflektion, um zu bestimmen, welche Eigenschaft verwendet werden soll.

Wenn Sie dies mit einer benutzerdefinierten Klasse tun möchten, können Sie es wie so tun:

<lcl:Foo>12</lcl:Foo> 

aktualisieren

:

[ContentProperty("Bar")] 
public class Foo : Control 
{ 
    public static DependencyProperty BarProperty = DependencyProperty.Register(
     "Bar", 
     typeof(int), 
     typeof(Foo), 
     new FrameworkPropertyMetaData(0)); 

    public int Bar 
    { 
     get { return (int)GetValue(BarProperty); } 
     set { SetValue(BarProperty, value); } 
    } 
} 

Dann Sie es in XAML wie so angeben könnten

Da Reflektion verwendet wird, müssen Sie DependencyProperty nicht wirklich ausführen. Zum Beispiel wird dies auch funktionieren:

[ContentProperty("Bar")] 
public class Foo : Control 
{ 
    public int Bar { get; set; } 
} 
+1

+1, super! Komplettes Beispiel und alles, danke! –

+1

Das Bit über 'ContentProperty' ist korrekt, aber zumindest in Silverlight und WP7 muss die angegebene Eigenschaft keine Abhängigkeitseigenschaft sein. Silverlight/WP7 verwendet lediglich die Reflektion, um die durch das Attribut "ContentProperty" angegebene Eigenschaft zu finden, sodass die Inhaltseigenschaft eine beliebige Eigenschaft sein kann, deren Typ von Xaml analysiert werden kann. – AnthonyWJones

+0

@AnthonyWJones - Guter Punkt. Ich habe die Antwort aktualisiert, um zu zeigen, dass jede Eigenschaft verwendet werden kann. –

Verwandte Themen