Textfeld in Combobox verwandeln?

Welcome to the POB User Group Online Community! Forums PUG DACH Textfeld in Combobox verwandeln?

Tagged: ,

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #3191
    Stefan Reichelt
    Participant

    Hallo,

    mal eine kleine WPF-Knobelei:

    Sieht jemand eine Möglichkeit, ein normales Textfeld in eine Combobox zu verwandeln? Konkret geht es mir um das Mail-Fenster. Dort möchte ich im Feld “From” zwei Werte per Klappbox anbieten, ohne dass das Feld selbst direkt beschreibbar wäre.

    Kennt sich jemand damit aus?

    Grüße,

    Stefan

    #3192
    Stefan Reichelt
    Participant

    Ok, hab es selbst herausgefunden:

    <ComboBox Grid.Column="1" SelectedValue="{Binding Path=MainEntity.MailFrom, Mode=TwoWay}" SelectedValuePath="Content">
              <ComboBoxItem Content="adresse1@domain.com"/>
              <ComboBoxItem Content="adresse2@domain.com"/>
    </ComboBox>
    #3193
    Stefan Reichelt
    Participant

    PS: Na gut, ein wenig Luft nach oben ist noch da. Mit dieser Variante funktioniert die Antwortfunktion nicht mehr richtig, weil das From-Feld nur noch Absender anzeigt, die als ComboBoxItem existieren. Könnte sich aber über Eigenschaften wie IsEditable lösen lassen…

    #3194
    Stefan Reichelt
    Participant

    Ok, konnte es mit Hilfe eines richtigen Entwicklers lösen. War am Ende für einem WPF-Anfänger wie mich doch etwas zu schwierig. Jetzt funktioniert es aber exakt wie gewünscht.

    #3195
    ms
    Keymaster

    Hallo Stefan,

    die Idee finde ich gut und spannend. Werde ich so auch mal testen.
    Jedoch sollte man vorsichtig sein und intensiv testen, wenn man hier nicht die Standard WendiaControls verwendet. Könnte sein, dass dann andere Dinge nicht mehr funktionieren.

    Als alternative Lösung, ohne den XAML Code zu manipulieren, hättest Du auch ein weiteres virtuelles Feld mit einem Enumerator auf dem Window platzieren und das ursprüngliche Feld ausblenden können. On Insert dann per Data Trigger, den ausgewählten Wert in das ursprüngliche Feld übernehmen.
    Das wäre zwar dann keine editierbare Combobox, aber geht in die gleich Richtung.

    Viele Grüße,
    Chris

    #3196
    Stefan Reichelt
    Participant

    Hallo Chris,

    Das wär natürlich auch eine Idee gewesen. Auf eine so simple Lösung bin ich gar nicht gekommen.

    Wie auch immer, die jetzige Lösung funktioniert wunderbar. Mit vereinten Kräften konnten wir das Feld sauber umbauen. Wie es funktioniert, kannst du dir ja dann nächste Woche vor Ort erläutern lassen, wenn er bei euch geschult wird. Er ist brilliant, mir in puncto Programmierung haushoch überlegen und wird definitiv eine große Bereicherung sein. 😉

    Grüße,

    Stefan

    PS, ein paar Details:

    Oben im Namespace-bereich mussten noch zwei weitere Zeilen hinzugefügt werden

            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"

    Darunter dann eine neue Listenressource:

        <Grid.Resources>
            <col:SortedList x:Key="liste">
                <sys:String x:Key="address1">Adresse1@domain.com</sys:String>
                <sys:String x:Key="address2">Adresse2@domain.com</sys:String>
            </col:SortedList>
        </Grid.Resources>

    Und letztlich die Combobox, die das bisherige Feld komplett ersetzt:

    <ComboBox x:Name="MailFrom" Grid.Column="1" DisplayMemberPath="Value" IsEditable="True" IsReadOnly="True" ItemsSource="{StaticResource ResourceKey=liste}" Text="{Binding Path=MainEntity.MailFrom, Mode=TwoWay}"/>

    Von mir kam letztlich nur noch die Idee selbst, und das IsReadOnly=”True”, um den Bearbeiter nur noch die Werte in der Box auswählen zu lassen. IsEditable wird dabei dennoch gebraucht, damit in eingegangenen Mails weiterhin der Absender angezeigt wird, obwohl dieser nicht in der Liste vorhanden ist.

Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.