我有一个简单的动画,可以交替改变图像的两个帧。它完美无缺,直到我尝试绑定bitmapimage urisource。
<Image Stretch="Fill">
<Image.Triggers>
<EventTrigger RoutedEvent="Image.Loaded">
<BeginStoryboard>
<Storyboard RepeatBehavior="Forever">
<ObjectAnimationUsingKeyFrames
BeginTime="00:00:00" Duration="{Binding ElementName=MyControl, Path=FrameDuration}"
Storyboard.TargetProperty="(Image.Source)">
<DiscreteObjectKeyFrame KeyTime="00:00:00.000000">
<DiscreteObjectKeyFrame.Value>
<BitmapImage UriSource="Assets/frame1.png" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
BeginTime="{Binding ElementName=MyControl, Path=FrameBeginTime}" Duration="{Binding ElementName=MyControl, Path=FrameDuration}"
Storyboard.TargetProperty="(Image.Source)">
<DiscreteObjectKeyFrame KeyTime="00:00:00.0000000">
<DiscreteObjectKeyFrame.Value>
<BitmapImage UriSource="Assets/frame2.png" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Image.Triggers>
我尝试了这两个绑定但没有一个工作:
XAML:
<BitmapImage Source="{Binding ElementName=MyControl, Path=FrameUri1}" />
代码:
public Uri FrameUri1 { get { return _frameUri1; } set { _frameUri1 = value; NotifyPropertyChanged("FrameUri1"); } }
和
XAML:
<Image Source="{Binding ElementName=CosoControl, Path=BitmapSource}" />
代码:
public ImageSource BitmapSource
{
get
{
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new Uri("pack://application:,,,/Myassembly;component/Assets/frame1.png");
bitmap.EndInit();
return bitmap;
}
}
我读过其他类似问题的帖子,但我对WPF / C#很新,我无法弄清楚如何解决它。我读到了IValueConverter,但不知道如何安排。
答案 0 :(得分:0)
最好的办法是使用差异。具有适当绑定的图像并隐藏它们。然后为所需的不透明度/可见性设置动画。
<Border BorderThickness="3" BorderBrush="#FF341A1A" Height="200">
<Border.Background>
<VisualBrush>
<VisualBrush.Visual>
<Grid>
<Image x:Name="Img1" Visibility="Collapsed" Source="{Binding Text, ElementName=MyControl1}"/>
<Image x:Name="Img2" Visibility="Collapsed" Source="{Binding Text, ElementName=MyControl2}"/>
</Grid>
</VisualBrush.Visual>
</VisualBrush>
</Border.Background>
<Border.Triggers>
<EventTrigger RoutedEvent="Border.Loaded">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames
Duration="0:0:3"
Storyboard.TargetName="Img1"
Storyboard.TargetProperty="Visibility"
>
<DiscreteObjectKeyFrame KeyTime="0:0:1">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Border.Triggers>
</Border>