Come si trasforma una definizione XAML in un'istanza di oggetto?
Domanda
XAML ti consente di specificare un valore di attributo usando una stringa che contiene parentesi graffe. Ecco un esempio che crea un'istanza Binding e la assegna alla proprietà Text dell'elemento TextBox .
<TextBox Text="{Binding ElementName=Foo, Path=Bar}"/>
Voglio estendere XAML in modo che lo sviluppatore possa inserirlo come valido ...
<TextBox Text="{MyCustomObject Field1=Foo, Field2=Bar}"/>
Questo crea un'istanza della mia classe e imposta le proprietà Field1 / Field2 come appropriato. È possibile? In tal caso, come si fa?
Se questo è possibile, ho una domanda di follow-up. Posso prendere una stringa " {Binding ElementName = Foo, Path = Bar} " e chiedere al framework di elaborarlo e restituire l'istanza Binding specificata? Questo deve essere già fatto da qualche parte per far funzionare XAML sopra e quindi ci deve essere un modo per chiedere che la stessa cosa venga elaborata.
Soluzione
dai un'occhiata a markupextensions http://blogs.msdn.com/ wpfsdk / archive / 2007/03/22 / blogpost-text-creatingasimplecustommarkupextension.aspx
Altri suggerimenti
La classe Binding
è una Markup Extension . Puoi scrivere il tuo derivando da System.Windows.Markup.MarkupExtension
.
ElementName
e Path
sono semplicemente proprietà dell'oggetto Binding
.
Per quanto riguarda il followup, puoi creare un nuovo Binding
nel codice creando un'istanza dell'oggetto Binding
. Non conosco un modo per elaborare una stringa.