2008-12-16 8 views
1

Je travaille sur un Custom MarkupExtension dans une application WPF. Chaque exemple documenté que j'ai vu utilise des paramètres de chaîne de XAML pour construire le nouvel objet. Est-il possible d'utiliser un paramètre non-chaîne?Comment créer une MarkupExtension avec des paramètres non-string?

En d'autres termes, comment puis-je faire quelque chose comme ça?

[MarkupExtensionReturnType(typeof(Uri))] 
public class RefPackUriExtension : MarkupExtension 
{ 
    object _assembly = null; 

    public RefPackUriExtension() { } 

    public RefPackUriExtension(object assembly) 
    { 
     this._assembly = assembly; 
    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     //return an object by using the "_assembly" member somehow 
    } 
} 

Répondre

0

Tous les paramètres à votre MarkupExtension sont soumis au même comportement que l'analyse syntaxique des propriétés des objets CLR. Vous pouvez utiliser un TypeConverter pour permettre à l'utilisateur de fournir un string converti au type cible, ou vous pouvez utiliser un autre MarkupExtension.

À titre d'exemple de la première, voir la classe ColorConverter. À titre d'exemple de ce dernier, voir la classe RelativeSource (qui est utilisée dans les BindingMarkupExtension).

+0

Etes-vous sûr que cela fonctionne? Avant de publier la question, j'ai essayé d'utiliser Binding MarkupExtension et j'ai reçu une erreur de compilation. – YeahStu

+1

Ce qui serait utile est un exemple de XAML utilisé dans de tels cas – YeahStu

Questions connexes