代码之家  ›  专栏  ›  技术社区  ›  Willy

从代码隐藏(xaml.cs)而不是从视图模型MVVM启动故事板

  •  1
  • Willy  · 技术社区  · 7 年前

    <Style TargetType="Border" x:Key="BorderBlinking">
        <Style.Triggers>
            <DataTrigger Binding="{Binding PopupBlinking}" Value="True">
                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>                                
                            <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                             To="0" AutoReverse="True" Duration="0:0:0.5" SpeedRatio="3" RepeatBehavior="3x" />
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
                <DataTrigger.ExitActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                             To="1" AutoReverse="True" Duration="0:0:0.5" />
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.ExitActions>
            </DataTrigger>
        </Style.Triggers>
    </Style>
    

    我把它贴在边界上,就像这样:

    <Border Grid.Row="2" x:Name="popup" 
            Style="{StaticResource BorderBlinking}"
            CornerRadius="10,10,0,0" Height="25" Margin="0"
            HorizontalAlignment="Center" Width="Auto"
            VerticalAlignment="Center"
            BorderBrush="DarkBlue" BorderThickness="1"
            Background="AntiqueWhite">
        <StackPanel  Orientation="Horizontal" HorizontalAlignment="Center">
            <Image Source="Common.Images;component/Images/Info.png" Height="20" Width="20" Stretch="Fill"/>
            <TextBlock Margin="5" VerticalAlignment="Center" HorizontalAlignment="Left" 
           Background="Transparent" FontSize="12"><Run Text="this is a custom popup"/></TextBlock>
        </StackPanel>
    </Border>
    

    然后,从我的代码隐藏(不是视图模型)开始,我想启动故事板。我知道如何通过绑定到datatrigger的属性“PopupUplinking”(如上图所示)从视图模型启动它,但现在我需要知道如何从代码隐藏(而不是视图模型)启动它。

            <Storyboard x:Key="Blink" >
                <DoubleAnimation Storyboard.TargetProperty="Opacity" 
                                                     To="0" AutoReverse="True" Duration="0:0:0.5" SpeedRatio="3" RepeatBehavior="3x" />
                <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                                     To="1" AutoReverse="True" Duration="0:0:0.5" />
            </Storyboard>
    

            Storyboard sb = Resources["Blink"] as Storyboard;            
            sb.Begin(this.popup);
    

    这是正确的方法吗?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Clemens    7 年前

    您可以直接启动这样的动画:

    popup.BeginAnimation(UIElement.OpacityProperty,
        new DoubleAnimation
        {
            To = 0,
            Duration = TimeSpan.FromSeconds(0.5),
            AutoReverse = true,
            RepeatBehavior = RepeatBehavior.Forever
        });