使用Storyboard代码在Windows Universal App中的资源字典中工作

时间:2014-07-19 15:50:43

标签: storyboard winrt-xaml windows-8.1 windows-phone-8.1 win-universal-app

在这里需要一些关于Storyboard的帮助。在我的MainPage.xaml中,我有一个如下的故事板代码:

<Page.Resources>
    <Storyboard x:Name="BackStoryBoard">
        <DoubleAnimation Duration="0" To="4.55" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="image" d:IsOptimized="True"/>
        <DoubleAnimationUsingKeyFrames AutoReverse="True" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="image">
            <EasingDoubleKeyFrame KeyTime="0" Value="710"/>
            <EasingDoubleKeyFrame KeyTime="0:0:30" Value="-710"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Page.Resources>

现在,在我的网格中,我有一个像下面的图像代码(我只有一个网格):

<Grid>
    <Image x:Name="image" Source="Images/Background4.png" Stretch="Fill" RenderTransformOrigin="0.5,0.5">
        <Image.RenderTransform>
            <CompositeTransform/>
        </Image.RenderTransform>
    </Image>

</Grid>

从后面的代码中,我在MainPage构造函数中添加了以下代码:

    BackStoryBoard.Begin();

正如我们所看到的,此故事板使应用程序的背景图像能够在每30秒的时间间隔后从右向左和从左向右移动。

现在,我有一些页面,我想在所有页面中使用相同的Storyboard效果。我可以在所有页面中复制粘贴相同的代码,但这不是一个好习惯。所以,我创建了一个名为Styles.xaml的资源字典。

所以,我的问题是,如何在资源字典中编写故事板代码并在我的不同XAML页面中使用它?即使我添加了故事板,我也无法打电话给 BackStoryBoard.Begin(); ,因为它无法访问。那么,我该如何解决这个问题呢?任何帮助将受到高度赞赏。 : - )

1 个答案:

答案 0 :(得分:2)

尝试,

将资源字典合并到所有需要的xaml页面中,例如

<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="YourDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Page.Resources>

从代码背后,

var storyboard = ((this.Resources as ResourceDictionary).MergedDictionaries[0] as ResourceDictionary)["BackStoryBoard"] as Storyboard;
Storyboard.SetTarget(storyboard, image);
storyboard.Begin();

希望这能解决您的问题。