WP8如何开始在我的ControlTemplate中定义的Storyboard ?

本文关键字:ControlTemplate 定义 Storyboard 我的 何开始 开始 WP8 | 更新日期: 2023-09-27 18:06:30

我有一个ControlTemplate,用于9个按钮(在这种情况下是一个井字字段)目的是有一个额外的动画,使Button在游戏结束后变成红色。模板在App.xaml中定义,并在spil .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。我如何在后面的代码中访问模板的资源?

WP8如何开始在我的ControlTemplate中定义的Storyboard ?

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

换句话说,你有这个:

<Storyboard x:Key="storyBoardOnWin">

你可以这样做:

<Storyboard x:Name="storyBoardOnWin">

并从后面的代码调用它,就像这样:

page.xaml.cs

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

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

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

我猜你已经有按钮,当你试图获得动画(可能通过按钮点击事件或其他),所以尝试以下:

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