首页 > 解决方案 > 无法访问后面代码中的 WPF 故事板名称

问题描述

我想让 TextBlock 的文本闪烁。但是,无法访问 Storyboard。请查看以下代码:

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资源未找到。

标签: c#wpfxaml

解决方案


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);

Name 变成 C# 代码中的标识符。Key 是字典中的索引,在这种情况下是 ResourceDictionary。

请参阅https://docs.microsoft.com/en-us/dotnet/api/system.windows.frameworkelement.findresource?view=netframework-4.8


推荐阅读