C# 值更改时设置文本框背景动画
我想根据ViewModel中的新值设置textbox(Price)背景颜色的动画 颜色可以根据新值的不同而不同(大0->绿色-小0->红色) 我能看到的唯一动画是在启动时设置新值。此后,动画将不再出现C# 值更改时设置文本框背景动画,c#,wpf,datatrigger,coloranimation,wpf-animation,C#,Wpf,Datatrigger,Coloranimation,Wpf Animation,我想根据ViewModel中的新值设置textbox(Price)背景颜色的动画 颜色可以根据新值的不同而不同(大0->绿色-小0->红色) 我能看到的唯一动画是在启动时设置新值。此后,动画将不再出现 <TextBox HorizontalAlignment="Left" Height="23" Margin="10,178,0,0" TextWrapping="Wrap" Text="{Binding price}" VerticalAlignment="Top" Width="120"
<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>
价格可能每秒改变几次,因此当设置了新的价格值时,我需要中止正在运行的动画。对于一个简单的颜色改变来说,故事板似乎有点过分了。我将绑定背景色,并为价格创建一个IValueConverter,它只是跟随价格的通知更改 我建议使用IValueConverter绑定到Price的背景元素,并隔离那里的着色逻辑 Xaml
我想这就是你要找的。我已经测试过了,背景颜色会在瞬间改变。基本上您有一个小错误:Duration应该是hh:mm:ss.fff,但是您设置了hh:mm:ss:??.fff
<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>
<BeginStoryboard>
<Storyboard>
<ColorAnimation AutoReverse="True" To="Green" Duration="0:0:0.100"
Storyboard.TargetProperty="(TextBox.Background).(SolidColorBrush.Color)"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
好的,现在我知道出了什么问题。当我运行到“肯定”状态,并且之后所有来自转换器的更新也带有“肯定”时,DataTrigger从不进入“EnterActions”。现在我需要知道如何重置DataTriggerHi的值,对不起,我忘了告诉你我需要一个“flash”动画。所以当价格上涨时,我想把颜色变成绿色。1秒后,颜色必须恢复为默认颜色。根据我对WPF的理解,我需要一个触发器来启动这些动画。
[ValueConversion(typeof(decimal), typeof(Brush))]
public class PriceToColorConverter : IValueConverer
{
public object Convert(object value, Type target)
{
decimal price;
decimal.Parse(value.ToString(), price);
return (price > 0 ? Brushes.Green : Brushes.Red);
}
}
<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>
<BeginStoryboard>
<Storyboard>
<ColorAnimation AutoReverse="True" To="Green" Duration="0:0:0.100"
Storyboard.TargetProperty="(TextBox.Background).(SolidColorBrush.Color)"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>