我在WPF中的绑定方面仍然是一个业余爱好者,但我希望我能在字符串绑定到故事板动画方面得到一些帮助。我有一个自定义UserControl,只有一个TextBox和一些按钮布局。我想要做的是每当TextBox从服务器获取前景将从浅色到深色的动画。在创建该控件时,用户指定他们想要看到动画的颜色。举个例子,我们选择浅绿色到深绿色。我在UserControl中有2个变量存储为字符串,现在我想将它们绑定到故事板动画。任何帮助将不胜感激。
XAML:
<EventTrigger RoutedEvent="TextBox.TextChanged">
<BeginStoryboard>
<Storyboard>
<ColorAnimation AutoReverse="False" Duration="0:0:2" From="{Binding StartTextColor}" To="{Binding EndTextColor}"
Storyboard.TargetName="txtTextField" AccelerationRatio="1"
Storyboard.TargetProperty="(TextBox.Foreground).(SolidColorBrush.Color)"
FillBehavior="HoldEnd">
</ColorAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
代码:
public string StartTextColor
{
get
{
return startTextColor;
}
set
{
startTextColor= value;
}
}
public string EndTextColor
{
get
{
return _endTextColor;
}
set
{
_endTextColor= value;
}
}
答案 0 :(得分:3)
刚刚对动画进行了string
颜色绑定的快速测试,效果很好。
如果您曾经绑定过,则应确保您的对象实现INotifyPropertyChanged
,因为这会通知XAML属性已更改。
我的测试:
public partial class MainWindow : Window, INotifyPropertyChanged
{
private string startTextColor = "Green";
private string _endTextColor = "Red";
public MainWindow()
{
InitializeComponent();
}
public string StartTextColor
{
get { return startTextColor; }
set
{
startTextColor = value;
NotifyPropertyChanged("StartTextColor");
}
}
public string EndTextColor
{
get { return _endTextColor; }
set
{
_endTextColor = value;
NotifyPropertyChanged("EndTextColor");
}
}
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Notifies the property changed.
/// </summary>
/// <param name="info">The info.</param>
public void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
的Xaml:
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication4"
Title="MainWindow" Height="350" Width="2640" Name="UI" >
<Grid>
<TextBox Name="txtbx">
<TextBox.Triggers>
<EventTrigger RoutedEvent="TextBox.TextChanged">
<BeginStoryboard>
<Storyboard>
<ColorAnimation AutoReverse="False" Duration="0:0:2" AccelerationRatio="1" Storyboard.TargetName="txtbx" FillBehavior="HoldEnd"
From="{Binding ElementName=UI, Path=StartTextColor}"
To="{Binding ElementName=UI, Path=EndTextColor}"
Storyboard.TargetProperty="(TextBox.Foreground).(SolidColorBrush.Color)">
</ColorAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBox.Triggers>
</TextBox>
</Grid>
</Window>
希望这会有所帮助:)