Laden...

TextBox Background Farbe animeren - Abhängig von gebundenem Wert

Erstellt von daTom vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.844 Views
D
daTom Themenstarter:in
41 Beiträge seit 2009
vor 10 Jahren
TextBox Background Farbe animeren - Abhängig von gebundenem Wert

Hallo zusammen,

ich komme gerade mit WPF nicht weiter.
Ich habe eine Anwendung, die Daten von einem Server in Realtime bezieht.
In der GUI habe ich ein Preisfeld (TextBox), das ständig aktualisiert wird. (Vergleichbar mit Börsenkursen)

Das Preisfeld soll bei jeder Änderung ein kurzes "Flashlight" bekommen, je nachdem ob der Preis gefallen oder gestiegen ist.

Später sollen auch noch andere TextBoxen so animiert werden.

Ich habe nun das Problem, dass ich absolut nicht weiß wie ich das mache.

Wie stelle ich das am besten an?
Mit einem DataTrigger auf der jeweiligen TextBox und im ViewModel dann zusätzliche Properties wie (PriceUp, PriceDown), die dann an den Trigger gebunden werden?

Oder eventuell mit einem IValueConverter, so dass ich keine neuen Properties ins ViewModel einfügen muss?

Für Tips bin ich sehr dankbar.

Gruß
daTom

I
57 Beiträge seit 2011
vor 10 Jahren

Background an Color/Brush Property im Viewmodel binden.
Property aktualisieren wenn du im VM merkst das ne Preisänderung stattgefunden hat.
Wenn das nur ein Flashlight sein soll, kannst du ja einfach nach x sekunden wieder auf orig zustand zurücksetzen, da gibts genug Möglichkeiten.
Andere Ansätze hast du ja auch genannt, also denke ich nicht das du überhaupt keine Ahnung hast wie das zu lösen ist.

D
daTom Themenstarter:in
41 Beiträge seit 2009
vor 10 Jahren

Hi,

danke für den Tip.

ich beschäftige mich seit ein paar Tagen erst wieder mit WPF, von daher ist das genannte nur das Ergebnis meiner Recherchen.

Es kann sein, dass ich mich noch mal melden muss 😃

Ich finde den ValueConverter sehr sympatisch. Ausprobiert habe ich den auch schon.
Das Problem ist nur, dass ich da nur den aktuellen Wert in der Convert-Methode bekomme.
Von daher denke ich mal, dass ich den vergessen kann?

D
daTom Themenstarter:in
41 Beiträge seit 2009
vor 10 Jahren

Ich habe das ganze jetzt mal versucht, leider wird die Textbox nur ein mal animiert. Danach passiert nichts mehr, der Wert ändert sich dafür aber immer weiter.

Hier der Auszug aus der XAML:


<TextBox HorizontalAlignment="Left" Height="23" Margin="10,178,0,0" TextWrapping="Wrap" Text="{Binding price}" VerticalAlignment="Top" Width="120" x:Name="ChangeField">
            <TextBox.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding price, Converter={StaticResource formatter}}" Value="positive">
                            <DataTrigger.EnterActions>
                                <StopStoryboard BeginStoryboardName="pos"></StopStoryboard>
                                <BeginStoryboard x:Name="pos">
                                    <Storyboard>
                                        <ColorAnimation  AutoReverse="True" To="Green" Duration="0:0:0:0.100" Storyboard.TargetProperty="(TextBox.Background).(SolidColorBrush.Color)"></ColorAnimation>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                            <DataTrigger.ExitActions>
                                <RemoveStoryboard BeginStoryboardName="pos"></RemoveStoryboard>
                            </DataTrigger.ExitActions>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>

P
660 Beiträge seit 2008
vor 10 Jahren

hmm, Wird der Converter denn bei jeder Änderung der "price"-Property durchlaufen?

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

D
daTom Themenstarter:in
41 Beiträge seit 2009
vor 10 Jahren

Hi,

ja wird er. Ich habe aber herausgefunden woran es liegt.
Ich möchte ja, dass bei jeder Preisänderung die Animation gestartet wird.
Der DataTrigger wird wird aber bei einem vorherigen "positive" Ereignis nicht noch mal getriggert, wenn der Converter wieder "positive" liefert.

Ich habe das ganze jetzt mit einem EventTrigger gelöst. Da funktioniert das wunderbar.