UWP - 对背景图像的淡入效果
UWP - FadeIn effect on background image
我的背景图片需要淡入淡出效果。在运行时,可以更改图像源,这与预期的设置绑定一起工作。无论如何,相应的动画不采取任何视觉效果。目前我的 xaml 如下所示:
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
xmlns:Media="using:Microsoft.Xaml.Interactions.Media"
<Page.Content>
<Grid>
<Grid.Background>
<ImageBrush x:Name="image" ImageSource="{Binding Path=ImageSource,UpdateSourceTrigger=PropertyChanged}" Stretch="UniformToFill" >
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="ImageOpened" >
<Media:ControlStoryboardAction ControlStoryboardOption="Play">
<Media:ControlStoryboardAction.Storyboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:1" Storyboard.TargetName="image"/>
</Storyboard>
</Media:ControlStoryboardAction.Storyboard>
</Media:ControlStoryboardAction>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</ImageBrush>
</Grid.Background>
当我改用时:
[...]
<Media:ControlStoryboardAction.Storyboard>
<Storyboard>
<FadeInThemeAnimation Storyboard.TargetName="Image" />
</Storyboard>
</Media:ControlStoryboardAction.Storyboard>
我明白了
System.Runtime.InteropServices.COMException: 未检测到已安装的组件。
无法解析 TargetName 图片。
在 Windows.UI.Xaml.Media.Animation.Storyboard.Begin()
在 Microsoft.Xaml.Interactions.Media.ControlStoryboardAction.Execute(对象发送者,对象参数)
在 Microsoft.Xaml.Interactivity.Interaction.ExecuteActions(对象发送者、ActionCollection 操作、对象参数)
在 Microsoft.Xaml.Interactions.Core.EventTriggerBehavior.OnEvent(对象发送者,对象 eventArgs)
有什么想法吗?
[编辑]
感谢@SWilko 的回答,我确定动画只适用于图像。如果我将 ImageBrush 更改为图像并将其放入网格(不是 Grid.Background),我上面的代码就可以工作。
使用 Image
控件并根据需要在顶部添加更多控件会不会更容易,例如
<Grid x:Name="LayoutGrid">
<Image x:Name="image" Stretch="UniformToFill"
Source="{Binding Path=ImageSource,UpdateSourceTrigger=PropertyChanged}"
Opacity="0" Visibility="Collapsed">
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ImageOpened">
<media:ControlStoryboardAction x:Name="sbAction" ControlStoryboardOption="Play">
<media:ControlStoryboardAction.Storyboard>
<Storyboard x:Name="sb">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
Storyboard.TargetName="image">
<DiscreteObjectKeyFrame KeyTime="00:00:00">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)"
Storyboard.TargetName="image">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:3" Value="0.5"/>
<EasingDoubleKeyFrame KeyTime="0:0:5" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</media:ControlStoryboardAction.Storyboard>
</media:ControlStoryboardAction>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</Image>
</Grid>
编辑
更新图像并从头开始制作动画。
我已将 Visibility
切换动画添加到 Storyboard
并将 Storyboard
命名为 sb
现在在后面的代码中,我使用 Storyboard Completed 事件来更改图像并重新启动动画。您可以在适合您的应用程序的地方执行此操作,这只是为了展示一个示例。
例如
sb.Completed += (sender, e) =>
{
//this is a local image for me you would probably update your ImageSource property here
var newimg = new BitmapImage(new Uri("ms-appx:///Assets/rock.jpg"));
image.Source = newimg;
image.Opacity = 0;
image.Visibility = Visibility.Collpased;
sb.Begin();
};
我的背景图片需要淡入淡出效果。在运行时,可以更改图像源,这与预期的设置绑定一起工作。无论如何,相应的动画不采取任何视觉效果。目前我的 xaml 如下所示:
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
xmlns:Media="using:Microsoft.Xaml.Interactions.Media"
<Page.Content>
<Grid>
<Grid.Background>
<ImageBrush x:Name="image" ImageSource="{Binding Path=ImageSource,UpdateSourceTrigger=PropertyChanged}" Stretch="UniformToFill" >
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="ImageOpened" >
<Media:ControlStoryboardAction ControlStoryboardOption="Play">
<Media:ControlStoryboardAction.Storyboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:1" Storyboard.TargetName="image"/>
</Storyboard>
</Media:ControlStoryboardAction.Storyboard>
</Media:ControlStoryboardAction>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</ImageBrush>
</Grid.Background>
当我改用时:
[...]
<Media:ControlStoryboardAction.Storyboard>
<Storyboard>
<FadeInThemeAnimation Storyboard.TargetName="Image" />
</Storyboard>
</Media:ControlStoryboardAction.Storyboard>
我明白了
System.Runtime.InteropServices.COMException: 未检测到已安装的组件。
无法解析 TargetName 图片。 在 Windows.UI.Xaml.Media.Animation.Storyboard.Begin() 在 Microsoft.Xaml.Interactions.Media.ControlStoryboardAction.Execute(对象发送者,对象参数) 在 Microsoft.Xaml.Interactivity.Interaction.ExecuteActions(对象发送者、ActionCollection 操作、对象参数) 在 Microsoft.Xaml.Interactions.Core.EventTriggerBehavior.OnEvent(对象发送者,对象 eventArgs)
有什么想法吗?
[编辑] 感谢@SWilko 的回答,我确定动画只适用于图像。如果我将 ImageBrush 更改为图像并将其放入网格(不是 Grid.Background),我上面的代码就可以工作。
使用 Image
控件并根据需要在顶部添加更多控件会不会更容易,例如
<Grid x:Name="LayoutGrid">
<Image x:Name="image" Stretch="UniformToFill"
Source="{Binding Path=ImageSource,UpdateSourceTrigger=PropertyChanged}"
Opacity="0" Visibility="Collapsed">
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ImageOpened">
<media:ControlStoryboardAction x:Name="sbAction" ControlStoryboardOption="Play">
<media:ControlStoryboardAction.Storyboard>
<Storyboard x:Name="sb">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
Storyboard.TargetName="image">
<DiscreteObjectKeyFrame KeyTime="00:00:00">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)"
Storyboard.TargetName="image">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:3" Value="0.5"/>
<EasingDoubleKeyFrame KeyTime="0:0:5" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</media:ControlStoryboardAction.Storyboard>
</media:ControlStoryboardAction>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</Image>
</Grid>
编辑
更新图像并从头开始制作动画。
我已将 Visibility
切换动画添加到 Storyboard
并将 Storyboard
命名为 sb
现在在后面的代码中,我使用 Storyboard Completed 事件来更改图像并重新启动动画。您可以在适合您的应用程序的地方执行此操作,这只是为了展示一个示例。 例如
sb.Completed += (sender, e) =>
{
//this is a local image for me you would probably update your ImageSource property here
var newimg = new BitmapImage(new Uri("ms-appx:///Assets/rock.jpg"));
image.Source = newimg;
image.Opacity = 0;
image.Visibility = Visibility.Collpased;
sb.Begin();
};