WPF Label Content mit Converter

  • WPF
  • .NET 5–6

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Joshi.

    WPF Label Content mit Converter

    Moin,

    ich möchte ein Label mit folgendem Beispielinhalt:

    "Heute ist der 19. Mai 2022"

    und das bilingual:

    Dazu muss man doch den Text in zwei Teile unterteilen

    1) "Heute ist der " bzw. "Today is "
    2) "19. Mai 2022" bzw. "May 19, 2022"

    Den ersten Teil erledige ich über eine Resourcedatei mit entsprechender en_US Ergänzung.
    Den zweiten Teil wollte ich mit einem Converter hintendranhängen

    Mein Konstrukt ist nu folgendes:

    XML-Quellcode

    1. <Label Content="{x:Static p:Translate.HeuteIstDer, Converter={StaticResource DatumAnhängerConverter}}"/>


    Anscheinend kennt die Content-Eigenschaft keine Converter-Erweiterung. So lautet die Fehlermeldung. Ich finde zwar Beispiele im Netz dafür aber die funktionieren irgendwie nicht.

    Ich habe schon eine Vielzahl von Labels mit bilingualem Inhalt und schone ettliche Converter, mit und ohne Parameter und CultureInfo am Laufen. Alles kein Problem. Aber die Kombi Content mit x:Static und Converter ist so bis jetzt einzigartig.

    Also, wie macht man das richtig?

    Gruß

    MQ
    Hallo

    MasterQ schrieb:

    Anscheinend kennt die Content-Eigenschaft keine Converter-Erweiterung

    Das hat damit wenig zu tun. Converter ist eine Eigenschaft der "Binding" Klasse und nicht von Content, Text oder sonst einer Eigenschaft eines Controls.
    Normalerweise bieten so gut wie alle Frameworks für Lokalisierungen derartige Methoden.

    Ansonsten würde ich ich in diesem Fall einfach eine Eigenschaft im ViewModel dafür erstellen. Ich hoffe zumindest das du mit Binding arbeitest.
    Was du auch machen kann ist dir den Text in einem TextBlock zusammenzustellen, denn ich sehe hier keinen Grund für ein Label:

    XML-Quellcode

    1. <TextBlock>
    2. <Run Text="{x:Static p:Translate.HeuteIstDer}"/>
    3. <Run Text="{Binding CurrentDatetime}"/>
    4. </TextBlock>


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Mein Beispiel war vielleicht nicht optimal gewählt. Ich bastele gerade ein Formular mit Eingabefelder

    Label: TextBox

    und das Label muss halt aus zwei Teilen bestehen.

    Ich bin aber mittlerweile dahintergestiegen

    XML-Quellcode

    1. <Label Content="{Binding Source={x:Static p:Translate.HeuteIstDer}, Converter={StaticResource DatumAnhängerConverter}}"/>


    macht's

    Danke

    MQ
    Hi.

    Auf die Gefahr hin, dass das nicht sofort konvertiert in eine unwandelbare Sache... :)

    String.Format ist vielleicht bekannt und in XAML geht das auch...

    XML-Quellcode

    1. <Run Text="{Binding Last_modified_milliseconds, Mode=OneWay, StringFormat={}{0:D}, ConverterCulture=de-DE}" />


    Wichtig ist das Setzen der ConverterCulture, damit die Landes/Lokale Formatierung greift.

    Dann erübrigt ich auch der "Konvertanterus Maximus" alias der Konverter.

    {0:D} <=> D = Langes Datumsformat

    Text.Run ist das Mittel der Wahl, wenn es um XAML und das TextBlock-Element (und Schöööhnnschrift) geht.

    Hier mal ein Beispiel:

    XML-Quellcode

    1. <TextBlock
    2. VerticalAlignment="Center"
    3. FontWeight="Bold"
    4. TextTrimming="WordEllipsis">
    5. <Run FontFamily="Segoe Fluent Icons" FontWeight="Normal" Text="&#xE7BE;" />
    6. <Run Text=" " />
    7. <Run FontWeight="Bold" Text="{Binding School, Mode=OneWay}" />
    8. </TextBlock>


    Segoe Fluent Icons <=> "Windows 11 Icons als Font in Windows 10. ...and for Free."

    So mach ich mir ein Iconized-Text.

    c.u. Joshi.

    "Was? Sturm? Ich zeich dir mal Sturm... Dööh! ", und so wütete er mal wieder gegen eine Naturgewalt.
    Sein Übermut und die Diskussionsbereitschaft mit der Natur waren sein Ende. :S