我要使闪烁的TextBlock的文本。但是,无法访问情节提要。 请检查以下代码:
XAML
<Page.Resources>
<Storyboard x:Name="BlinkLabelStoryBoard" x:Key="BlinkLabel" Duration="0:0:2" RepeatBehavior="Forever">
<ColorAnimationUsingKeyFrames
Storyboard.TargetName="DeviceState"
Storyboard.TargetProperty="Foreground.(SolidColorBrush.Color)">
<DiscreteColorKeyFrame KeyTime="0:0:0" Value="White"/>
<DiscreteColorKeyFrame KeyTime="0:0:1" Value="OrangeRed"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</Page.Resources>
<TextBlock x:Name="DeviceState" Text="{Binding RunMode}" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center" Loaded="Start_Animation">
隐藏代码
private void Start_Animation(object sender, RoutedEventArgs e)
{
Storyboard board = (FindResource("BlinkLabelStoryBoard") as Storyboard);
board.Begin();
}
但是,发生错误BlinkLabelStoryBoard resource not found
。
并且,发生另一错误DeviceState
资源未找到。
答案 0 :(得分:1)
FindResource需要键而不是名称。
XAML
<Page.Resources>
<Storyboard x:Key="BlinkLabel" Duration="0:0:2" RepeatBehavior="Forever">
<ColorAnimationUsingKeyFrames
C#
private void Start_Animation(object sender, RoutedEventArgs e)
{
Storyboard board = (FindResource("BlinkLabel") as Storyboard);
名称变成C#代码中的标识符。键是字典中的索引,在这种情况下为ResourceDictionary。
答案 1 :(得分:0)
我的代码中有一些错误。
(感谢Emo de Weerd),FindResource无法找到BlinkLabelStoryBoard
,因为FindResource需要键而不是名称。因此,我在Start_Animation处理程序中更改了代码,并在Xaml中删除了情节提要的名称。
Storyboard board =(作为Storyboard的FindResource(“ BlinkLabel”));
Storyboard.TargetName无法找到目标TextBlock的名称。因此,我将Storyboard.TargetName更改为{Binding ElementName=DeviceState}
。
board.Begin需要一个目标元素。因此,我将相关代码更改为board.Begin(sender as TextBlock)
最后,请参考以下完整代码:
XAML
<Page.Resources>
<Storyboard x:Key="BlinkLabel" Duration="0:0:2" RepeatBehavior="Forever">
<ColorAnimationUsingKeyFrames
Storyboard.TargetName="{Binding ElementName=DeviceState}"
Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)">
<DiscreteColorKeyFrame KeyTime="0:0:0" Value="White"/>
<DiscreteColorKeyFrame KeyTime="0:0:1" Value="OrangeRed"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</Page.Resources>
...
<TextBlock x:Name="DeviceState" Text="{Binding RunMode}" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center" Loaded="Start_Animation">
隐藏代码
private void Start_Animation(object sender, RoutedEventArgs e)
{
Storyboard board = (FindResource("BlinkLabel") as Storyboard);
board.Begin(sender as TextBlock);
}