Question

Je simple IMarkupExtension comme suit:

public class HelloWorldMarkup : IMarkupExtension<string>
{
    public string ProvideValue(IServiceProvider serviceProvider)
    {
        return "Hello World";
    }
    public override string ToString()
    {
        return "DesignTime Hello World";
    }
}

et mon Xaml qui l'utilise comme celui-ci ..

<StackPanel>
    <TextBlock Text="{my:HelloWorldMarkup}" />
    <HyperlinkButton Content="{my:HelloWorldMarkup}" />
</StackPanel>

Lors de l'exécution, tout fonctionne comme prévu.

Au moment de la conception cependant, le contenu de l'hyperlien montre les valeurs de temps de conception (de ToString), mais le texte du TextBlock ne montre pas.

Si je laisse comme ça, mon concepteur whinge à moi jours .. Quelqu'un at-il des suggestions sur la façon dont je peux avoir mes données en temps de conception d'affichage dans TextBlock texte Annotations?

Merci,

Était-ce utile?

La solution

essayer ..

<TextBlock DataContext="{my:HelloWorldMarkup}" Text="{Binding}" />

Autres conseils

Vous êtes à mi-chemin sur la bonne voie. Il y a une solution de contournement de bien à ce ( "by design") problème:

Utilisez la IMarkupExtension d'interface et dériver un certain contrôle d'une propriété de contenu (par exemple ContentControl). Maintenant, écoutez des modifications à la « Parent » propriété (vous pouvez avoir à utiliser une solution de contournement délicate en utilisant les propriétés ci-joints). Le rappel d'un événement doit alors appeler ProvideValue sur son propre en utilisant une simple mesure mise en œuvre IProvideValueTarget. Le résultat de ProvideValue doit alors être affecté à la propriété « Contenu ». Cela n'affecte pas l'exécution comme ProvideValue sera évalué avant que le contrôle et fonctionne comme un charme dans le temps de conception.

Je pense aussi à l'installation d'une liaison sur la propriété cible réduisant ainsi la classe de base à FrameworkElement.

Reportez-vous à https://github.com/MrCircuit/XAMLMarkupExtensions et https://github.com/MrCircuit/WPFLocalizationExtension pour un exemple de ce processus

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top