MultiTrigger - Problem mit Conditions und Setters

  • WPF

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

    MultiTrigger - Problem mit Conditions und Setters

    Hi,

    ich versuche derzeit eine Suchen-Textbox mit der WPF zu programmieren (So eine wie hier auf der Seite rechts oben).
    Ich möchte, dass wenn in der Textbox Suchen... steht und der Benutzer in die Textbox reinklickt, dass das Suchen... aus der Textbox verschwindet und sie leer ist.
    Das funktioniert aber leider nicht, da die Eigenschaft nicht gleichzeitig bei den Conditions und Setters angesprochen werden kann.

    XAML:

    XML-Quellcode

    1. <MultiTrigger>
    2. <MultiTrigger.Conditions>
    3. <Condition Property="Text" Value="Suchen..."/>
    4. <Condition Property="IsFocused" Value="True" />
    5. </MultiTrigger.Conditions>
    6. <MultiTrigger.Setters>
    7. <Setter Property="Text" Value="" />
    8. </MultiTrigger.Setters>
    9. </MultiTrigger>


    Fehlermeldung:

    Quellcode

    1. Der Wert im Attribut "Style" kann nicht in ein Objekt vom Typ "System.Windows.Style" konvertiert werden.
    2. Die Text-Eigenschaft kann nicht von einem Eigenschaftsauslöser festgelegt und gleichzeitig in der Bedingung des Auslösers angezeigt werden.
    3. Fehler in Objekt "System.Windows.Controls.TextBox"


    Kennt ihr einen Weg mein Vorhaben anders zu realisieren oder den Fehler zu beheben?
    Ich möchte das ungern im Code einbauen.

    MfG, Trudi
    Wäre nützlich wenn du mal etwas mehr Code zeigst. Sprich wo du den Style oder das Template erstellst usw.
    Ansonsten schau dir mal das Beispiel unten an vll. findest du den Fehler: msdn.microsoft.com/en-us/libra…windows.multitrigger.aspx
    Ohne mehr Code kann ich nix sagen, da ich auf anhieb nix falsches finde.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ich hab sowas neulich mit ControlTemplates gelöst. Im ControlTemplate ein Trigger auf IsFocusWithin = False, der dann einen Textblock anzeigt statt der Textbox.

    XML-Quellcode

    1. <ControlTemplate x:Key="TextboxTextblock" TargetType="TextBox">
    2. <TextBox x:Name="txt" Text="{Binding Path=Text, RelativeSource={RelativeSource TemplatedParent}}" />
    3. <ControlTemplate.Triggers>
    4. <Trigger Property="IsKeyboardFocusWithin" Value="False">
    5. <Setter TargetName="txt" Property="Template">
    6. <Setter.Value>
    7. <ControlTemplate TargetType="TextBox">
    8. <TextBlock
    9. Text="{Binding Path=Text, RelativeSource={RelativeSource TemplatedParent},
    10. Converter={StaticResource TextFilterConverter}, StringFormat=\{\{\{0\}\}\}}"
    11. HorizontalAlignment="Center" />
    12. </ControlTemplate>
    13. </Setter.Value>
    14. </Setter>
    15. </Trigger>
    16. </ControlTemplate.Triggers>
    17. </ControlTemplate>

    Nee, direkt die Lsg ist das nicht, aber mit einem Trigger auf Textbox.Text="" müsste sich imo was reißen lassen.