Mittwoch, 29. Juli 2009

Markup-Extension in WPF selber erstellen

Lange nichts geschrieben.. Heute eine Kleinigkeit zu wpf:

Markup-Extension in WPF selber erstellen:

Bsp: Ein PersonenAnzeigeControl erwartet ein Objekt vom Typ Person – auch in xaml – hier können aber nur Texte übergeben werden. (Nachname sei eindeutig….) :

Eine Klasse:

public class PersonExtension : MarkupExtension
{
public string Nachname { get; set;}

public override object ProvideValue(IServiceProvider serviceProvider)
{
//Target herausfinden…
IProvideValueTarget provideValueTarget = (IProvideValueTarget) serviceProvider.GetService(typeof (IProvideValueTarget));
DependencyProperty dependencyProperty = provideValueTarget.TargetProperty as DependencyProperty;
if (dependencyProperty == null)
{
return null;
}

//dependencyProperty ist nun das Target, dass gesetzt werden soll (hier „Person“) –
//wichtig, damit Personen nur den Richtigen Properties zugewiesen werden
return dependencyProperty.PropertyType!=typeof(Person) ? null : Person.FindByNachname(this.Nachname);
}
}

Kann wie folgt im xaml verwendet werden


<xaml>
<personenanzeigecontrol person = " { my:Person nachname=Müller } " />
</xaml>

Hinweise:
  • Die Klasse PersonExtension kann in xaml als my: PersonExtension oder als my:Person verwendet werden. Funktioniert nur, wenn es keine richtige Klasse my:Person gibt.
  • Wenn es einen Konstruktor gäbe
    • public PersonExtension(string nachname)…
    • Könnte die Extension in xaml (auch) wie folgt verwendet werden: Person=“{my:Person Müller}“

Keine Kommentare:

Kommentar veröffentlichen