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。我如何在后面的代码中访问模板的资源?
您的问题的解决方案是您已经将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"];