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
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF MVVM模式下,窗口的ShowDialog实现是通过使用自定义的对话框服务来实现的。 首先,我们需要创建一个实现了IDialogService接口的自定义对话框服务类,该接口定义了ShowDialog方法。例如: ``` public interface IDialogService { bool? ShowDialog(object viewModel); } ``` 然后,在实际的对话框服务类中,我们可以使用WPF的Window或者其他自定义的Window来实现ShowDialog方法。在ShowDialog方法内部,我们可以根据传入的ViewModel来创建对应的视图,并将ViewModel与视图进行关联。例如: ``` public class DialogService : IDialogService { public bool? ShowDialog(object viewModel) { var dialogWindow = new DialogWindow(); dialogWindow.DataContext = viewModel; return dialogWindow.ShowDialog(); } } ``` 在ViewModel中,我们需要使用对话框服务来调用ShowDialog方法,并将当前的视图模型作为参数传入。在调用ShowDialog方法后,可以根据返回值来判断对话框是通过"确定"按钮还是"取消"按钮关闭的。例如: ``` public class MainViewModel { private readonly IDialogService _dialogService; public MainViewModel(IDialogService dialogService) { _dialogService = dialogService; } public void OpenDialog() { var dialogViewModel = new DialogViewModel(); var result = _dialogService.ShowDialog(dialogViewModel); if (result == true) { // 确定按钮被点击 } else if (result == false) { // 取消按钮被点击 } } } ``` 最后,在使用MVVM模式的主视图或者其他视图中,我们可以通过依赖注入或者其他方式来创建对话框服务的实例,并将其作为参数传入ViewModel的构造函数中,以便于在ViewModel中调用ShowDialog方法来展示对话框。例如: ``` public partial class MainWindow : Window { private readonly MainViewModel _viewModel; public MainWindow() { InitializeComponent(); var dialogService = new DialogService(); _viewModel = new MainViewModel(dialogService); DataContext = _viewModel; } private void OpenDialogButton_Click(object sender, RoutedEventArgs e) { _viewModel.OpenDialog(); } } ``` 通过以上步骤,我们就可以实现WPF MVVM模式下窗口ShowDialog的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值