画像のフェードアウトとフェードインのプログラム。
絵の上にバック色と同じ白いRectangleをかぶせて透明度を変化、同時に画像もチェンジ。


void ImageFadeinFadeout( string [] imgNms, int second )
{
//<Grid>
// <Image Source="XIAOXIN4.png" Width="100" Height="100" x:Name="P1" />
// <Rectangle Width="100" Height="100" Fill="#00FFFFFF" x:Name="A1"/>
//</Grid>

// usage. ImageFadeinFadeout( new string[] { "XIAOXIN4.PNG","XIAOXIN29.PNG"}, 4 );

Storyboard bd,bd2;

{
bd = new Storyboard();
ColorAnimation ca = new ColorAnimation();
Storyboard.SetTarget( ca, (DependencyObject)FindName("A1") );
Storyboard.SetTargetProperty( ca, new PropertyPath("(Fill).(COLOR)") ); //In property path syntax, everything within ( ) brackets resolve to a property
ca.From = Color.FromArgb( 0,255,255,255 ); // 透明
ca.To = Color.FromArgb( 255,255,255,255 ); // 不透明 バック色
ca.Duration = new Duration( new TimeSpan(0,0,second));
bd.Children.Add(ca);
}

{
bd2 = new Storyboard();
ColorAnimation ca = new ColorAnimation();
Storyboard.SetTarget( ca, (DependencyObject)FindName("A1") );
Storyboard.SetTargetProperty( ca, new PropertyPath("(Fill).(COLOR)") );
ca.From = Color.FromArgb( 255,255,255,255 );
ca.To = Color.FromArgb( 0,255,255,255 );
ca.Duration = new Duration( new TimeSpan(0,0,second));
bd2.Children.Add(ca);
}

var query = from nm in imgNms
select new BitmapImage( new Uri(nm, UriKind.Relative)); // <-- かっこいい

int i = 0;
int cnt = imgNms.Length;
var ls = query.ToArray();
bd.Completed += (o,e)=>
{
P1.Source = ls[++i%cnt];
bd2.Begin();
};

bd2.Completed += (o,e)=>{ bd.Begin(); };

bd.Begin();
}