WPF编程,通过DoubleAnimation控制图片的透明度,将重叠的图片依次显示。

时间:2025-03-30 10:34:37

原文:WPF编程,通过DoubleAnimation控制图片的透明度,将重叠的图片依次显示。

版权声明:我不生产代码,我只是代码的搬运工。 https://blog.****.net/qq_43307934/article/details/87369585

3张图片按照1-3的顺序叠放在面板上,然后依次将图片的透明度由1变化到0。当第1张图片的透明度变为0时显示第2张图片,这样形成了一幅连续的动画。

WPF编程,通过DoubleAnimation控制图片的透明度,将重叠的图片依次显示。 

 1、建立窗口在Grid 面板中放置图片

    <Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid Name="grid"> </Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0"
Margin="5"
Content="开始"
Click="Buttonstart" />
<Button Grid.Column="1"
Margin="5"
Content="暂停"
Click="ButtonPause" />
<Button Grid.Column="2"
Margin="5"
Content="继续"
Click="ButtonResume"/>
<Button Grid.Column="3"
Margin="5"
Content="停止"
Click="ButtonStop" />
</Grid> </Grid>

2、后台

public partial class Window3 : Window
{
Storyboard story;
private List<Image> imagelist; public Window3()
{
InitializeComponent();
} private void Window_Loaded(object sender, RoutedEventArgs e)
{
story = new Storyboard();
NameScope.SetNameScope(this, new NameScope());
imagelist = new List<Image>(); for (int i = 0; i < 3; i++)
{
string name = "img" + (3 - i);
string strUri;
strUri = string.Format("pack://application:,,,/Photo/{0}.jpg", (3 - i));
Image img = new Image();
img.Name = name;
BitmapImage myBitmapImage = new BitmapImage();
myBitmapImage.BeginInit();
myBitmapImage.UriSource = new Uri(strUri);
myBitmapImage.EndInit();
img.Source = myBitmapImage;
this.RegisterName(name, img);
grid.Children.Add(img);
Grid.SetRow(img, 0);
Grid.SetColumn(img, 0);
imagelist.Add(img);
}
imagelist.Reverse();
for (int i = 0; i < imagelist.Count - 1; i++)
{
DoubleAnimation anim = new DoubleAnimation();
anim.BeginTime = TimeSpan.FromSeconds(0.9 * i);
anim.From = 1;
anim.To = 0;
// anim.AutoReverse = true;
anim.RepeatBehavior = RepeatBehavior.Forever;
anim.Duration = TimeSpan.FromSeconds(0.5);
Storyboard.SetTargetName(anim, imagelist[i].Name);
Storyboard.SetTargetProperty(anim, new PropertyPath(Image.OpacityProperty));
story.Children.Add(anim);
} } private void Buttonstart(object sender, RoutedEventArgs e)
{
story.Begin(this, true);
} private void ButtonPause(object sender, RoutedEventArgs e)
{
story.Pause(this);
} private void ButtonResume(object sender, RoutedEventArgs e)
{
story.Resume(this);
} private void ButtonStop(object sender, RoutedEventArgs e)
{
story.Stop(this);
}
}