WP8如何开始在ControlTemplate中定义的故事板?

时间:2014-06-04 09:19:01

标签: c# windows-phone-8 resources storyboard controltemplate

我有一个ControlTemplate用于9个按钮(在这种情况下是一个tic tac toe字段) 目的是在游戏结束后有一个额外的动画变为Button红色。模板在App.xaml中定义,并在Spiel.xaml.cs中使用。使用此模板的按钮是在代码中创建的,而不是使用Spiel.xaml文件。

<Application.Resources>
    <ControlTemplate x:Key="MatrixElement" TargetType="Button">
        <Border x:Name="MatrixElementBorder" BorderBrush="White" Margin="0,0,0,0" Width="140" Height="140">
            <Border.Background>
                <SolidColorBrush x:Name="MatrixElementBackgroundBrush" Color="LightBlue"/>
            </Border.Background>

            <Border.Resources>
                <Storyboard x:Key="storyBoardOnWin">
                    <ColorAnimation
                        Storyboard.TargetName="MatrixElementBorder"
                        Storyboard.TargetProperty="(Border.Background)"
                        From="DarkBlue"
                        To="DarkRed"
                        Duration="0:0:2" />
                </Storyboard>
            </Border.Resources>
        </Border>
    </ControlTemplate>
    ...
</Application.Resources>

我找不到在我的代码中访问storyBoardOnWin动画的方法。 我尝试通过Application.Current.Resources["storyBoardOnWin"];来访问它 但是返回一个nullPointer。如何在后面的代码中访问模板的资源?

2 个答案:

答案 0 :(得分:0)

您的问题的解决方案是您已将storyBoardOnWin属性标记为Border的资源字典中的Key。如果您将其标记为名称,则可以在代码隐藏中直接调用它。

换句话说,你有这个:

<Storyboard x:Key="storyBoardOnWin">

您可以这样做:

<Storyboard x:Name="storyBoardOnWin">

并从后面的代码中调用它:

page.xaml.cs

...
storyBoardOnWin.Begin();
...

希望有所帮助!我不确定你是如何使用ControlTemplate的,即如果它在自己的文件中被定义为资源,那么如果是,那么这可能不会起作用。

答案 1 :(得分:0)

您无法访问该资源,因为它不是App.Resources的资源。它是控件的资源,是App.Resouces的资源。

我猜你在尝试获取动画时已经有了按钮(可能是通过按钮点击事件或其他东西),所以请尝试以下方法:

var border = (Border)VisualTreeHelper.GetChild(button,0);
var story = (Storyboard)border.Resources["storyBoardOnWin"];