Frage

Ich habe eine einfache Imarkupextsion wie folgt:

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

Und mein XAML, das es so verwendet.

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

Zur Laufzeit funktioniert alles wie erwartet.

Zum Entwurfszeit zeigt der Inhalt des Hyperlink jedoch die Entwurfszeitwerte (aus dem ToString), der Text des Textblocks wird jedoch nicht angezeigt.

Wenn ich es so lasse, wird mein Designer mich tagelang zu mir wenden. Hat jemand Vorschläge, wie ich meine Markups -Designzeitdaten im Textblock -Text anzeigen kann?

Danke vielmals,

War es hilfreich?

Lösung

Versuchen..

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

Andere Tipps

Du bist auf halbem Weg auf dem richtigen Weg. Es gibt einige schöne Problemumgehungen in diesem ("nach Design") Problem:

Verwenden Sie die Schnittstelle Imarkupextsion und leiten Sie eine Steuerung mit einer Inhaltseigenschaft (z. B. ContentControl) ab. Hören Sie sich nun Änderungen an der Eigenschaft "Eltern" an (Sie müssen möglicherweise eine knifflige Problemumgehung mit beigefügten Eigenschaften verwenden). Der Ereignisrückruf sollte dann mit einer benutzerdefinierten einfachen iProvidevaluetarget -Implementierung von Sorge Value aufrufen. Das Ergebnis von CareValue muss dann der Eigenschaft "Inhalt" zugeordnet werden. Dies wirkt sich nicht auf die Laufzeit aus, da das Angebot Value vor der Kontrolle bewertet wird und wie ein Zauber in der Entwurfszeit funktioniert.

Ich denke auch darüber nach, eine Bindung an der Zieleigenschaft zu installieren und so die Basisklasse auf FrameworkElement zu reduzieren.

Beziehen auf https://github.com/mrcircuit/xamlmarkupextensions und https://github.com/mrcircuit/wpflocalizationxtsion Für ein Beispiel für diesen Prozess.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top