WPF MVVM模式下,实现动画Storyboard开始和停止

需求背景

        工业上位机软件,需要用到动态管道,通过监控设备状态,实现动态管道的开始流动和结束流动。

页面如下

        

Xaml代码

 <Page.Resources>
     <Storyboard x:Key="Storyboard2">
         <DoubleAnimation
             AutoReverse="False"
             RepeatBehavior="Forever"
             Storyboard.TargetName="Piping"
             Storyboard.TargetProperty="(Shape.StrokeDashOffset)"
             From="20"
             To="0"
             Duration="0:0:1" />
     </Storyboard>
 </Page.Resources>

 <Border
     Margin="0,5"
     Background="White"
     Effect="{StaticResource MaterialDesignShadowDepth1}">
     <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
         <StackPanel>
             <Grid>
                 <!--  背景层  -->
                 <Polyline
                     Opacity="0.5"
                     Points="615,145 615,190 105,190 105,370"
                     Stroke="Silver"
                     StrokeThickness="4" />

                 <!--  动画层  -->
                 <Polyline
                     x:Name="Piping"
                     Points="615,145 615,190 105,190 105,370"
                     Stroke="Orange"
                     StrokeDashArray="5 5"
                     StrokeThickness="2"
                     Visibility="{Binding IsRun, Converter={StaticResource BoolToVisibility_Visible}}">
                     <i:Interaction.Triggers>
                         <i:DataTrigger Binding="{Binding IsRun}" Value="true">
                             <i:ControlStoryboardAction ControlStoryboardOption="Play" Storyboard="{StaticResource Storyboard2}" />
                         </i:DataTrigger>
                         <i:DataTrigger Binding="{Binding IsRun}" Value="false">
                             <i:ControlStoryboardAction ControlStoryboardOption="Stop" Storyboard="{StaticResource Storyboard2}" />
                         </i:DataTrigger>
                     </i:Interaction.Triggers>
                 </Polyline>
             </Grid>

             <!--  增加一个按钮模拟后台变量为true或false  -->
             <Button
                 VerticalAlignment="Bottom"
                 Command="{Binding RunCommand}"
                 Content="开始/结束" />
         </StackPanel>
     </Grid>
 </Border>

注:里面的i使用的是Behaviors库。

ViewModel代码

        [ObservableProperty]
        bool isRun;

        [RelayCommand]
        void Run()
        {
            IsRun = !IsRun;
        }

        public void Test()
        {
            MyLog.Show("Test", "触发了");
        }

注:使用的是CommunityToolkit库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值