Вот версия кода C # для тех, кому это нужно ...
if (IsImageBlinking)
{
DoubleAnimation da = new DoubleAnimation();
da.From = 1.0;
da.To = 0.0;
da.RepeatBehavior = RepeatBehavior.Forever;
da.AutoReverse = true;
sb.Children.Add(da);
Storyboard.SetTargetProperty(da, new PropertyPath("(Image.Opacity)"));
Storyboard.SetTarget(da, image1);
sb.Begin();
}
С другой стороны, вы можете реализовать мигание для любого элемента управления, подобного этому.
<UserControl.Resources>
<Thickness x:Key="ControlMargin">0 5 0 0</Thickness>
<Storyboard x:Key="AlertArea" >
<DoubleAnimation Storyboard.TargetName="gdPersonData"
Storyboard.TargetProperty="Opacity"
From="0"
To="1"
RepeatBehavior="3x"
AutoReverse="True"
Duration="0:0:0.1"/>
</Storyboard>
<Storyboard x:Key="AlertArea2" >
<DoubleAnimation Storyboard.TargetName="gdPersonData"
Storyboard.TargetProperty="Opacity"
From="1"
To="0"
RepeatBehavior="1x"
AutoReverse="True"
Duration="0:0:0.1"/>
</Storyboard>
</UserControl.Resources>
AlertArea должен генерировать мигание 3 раза, а когда оно закончится, мы должны восстановить Opacity
, используя AlertArea2 .
В конструкторе UserControl/Window
..
Storyboard sb = this.FindResource("AlertArea") as Storyboard;
sb.Completed += Sb_Completed;
..
private void Sb_Completed(object sender, EventArgs e)
{
Storyboard sb2 = this.FindResource("AlertArea2") as Storyboard;
sb2.Begin();
}
В месте, где вам нужно начать мигать, сделайте это
Dispatcher.BeginInvoke((Action)(() =>
{
Storyboard sb = this.FindResource("AlertArea") as Storyboard;
sb.Begin();
}));