当前位置: 首页 > news >正文

5.4.2 MVVM例2-用户控件的使用(水在水管中流动的实例)

        本文以一个例子介绍用户控件的使用(UserControl),下图所示:       

一、主要技术点

        1.MainViewModel使用CommunityToolkit.Mvvm 这个Nuget包

        2.LinearGradientBrush使用,下面代码可以产生如下的效果

           <LinearGradientBrush x:Key="HorizontalBackground"
                      StartPoint="0.5 0" EndPoint="0.5 1">
                     <GradientStop Color="SkyBlue" Offset="0.1"/>
                    <GradientStop Color="Transparent" Offset="0.1"/>
                     <GradientStop Color="Transparent" Offset="0.9"/>
                     <GradientStop Color="SkyBlue" Offset="0.9"/>
           </LinearGradientBrush>

        3.类的代码使用对应的xaml中资源可以直接这样使用:

privateLinearGradientBrush HorizontalBackground => (LinearGradientBrush)Resources["HorizontalBackground"];

 4.依赖属性如果不变化,就不会自动调用其回调函数,

   如果需要窗口打开后需要自动调用下某属性的回调函数以完成初始化,可以自己写代码调用。

       public PipeLine(){InitializeComponent();Loaded += PipeLine_Loaded;}private void PipeLine_Loaded(object sender, RoutedEventArgs e){OnDirectionChanged(this, new DependencyPropertyChangedEventArgs(DirectionProperty, Orientation.Horizontal, Orientation.Horizontal));}

5.Line的虚线产生

        StrokeDashArray可以产生虚线。

    StrokeDashOffset 的变化可以产生动画效果。

    <Line Width="200" Height="50" Stroke="Red" StrokeThickness="10"  X1="0" Y1="0"X2="200" Y2="0" Margin="0 20"              StrokeDashArray="1 2"/>

6.动画效果,通过StrokeDashOffset 产生动画效果。 使用基于帧的动画。

        构建基于帧的动画的基本技术很容易。只需要为静态的CompositionTarget.Rendering事件关联事件处理程序。一旦关联事件处理程序,WPF就开始不断地调用这个事件处理程序(只要渲染代码的执行速度足够快,WPF每秒将调用60次)。

        因为这个是UI中的事件,通过调用viewModel中的函数来实现虚线的移动。

       注意:StrokeDashOffset减少视觉效果是水平方向向右移动。

 public MainWindow()
 {
     InitializeComponent();
     this.DataContext = new MainViewModel(this);
     CompositionTarget.Rendering += OnRendering;
 }
 private void OnRendering(object sender, EventArgs e)
 {
     // 将事件转发到 ViewModel
   

http://www.xdnf.cn/news/220465.html

相关文章:

  • 路径规划算法总结:从 Dijkstra 到 A* 与 Hybrid A
  • GUI_DrawPixel 函数详解
  • BalenaEtcher 2.1镜像烧录工具软件下载及安装教程
  • Vite性能优化指南 ✅
  • 强化学习(二)马尔科夫决策过程(MDP)
  • java AsyncTool
  • ACTF2025 - WEB Excellent-Site
  • 第十章:CrewAI - 面向流程的多 Agent 结构化协作
  • Andorid车机UI适配,AndroidUI图px的单位,如何适配1920x720,PPI100的屏幕设备
  • 【GESP】C++三级练习 luogu-B2117 整理药名
  • Rockchip Android平台打开GKI无法开机问题
  • 应用服务器-IIS
  • 推荐系统中 Label 回收机制之【时间窗口设计】
  • 基于Lucene的多场景检索系统开发指南
  • [按键安卓ios脚本辅助插件开发]数组排序函数例子
  • 明远智睿SSD2351开发板:开启嵌入式开发新篇程
  • C#实现对达索(Dassault)SolidWorks中3D图纸转化为手机可直接查看预览图纸格式
  • 高级项目管理
  • 巧记英语四级单词 Unit6-下【晓艳老师版】
  • C++程序退出时的对象析构陷阱:深度解析与避坑指南
  • mysql 事务中如果有sql语句出错,会导致自动回滚吗?
  • 力扣刷题总表
  • 【Vue】 实现TodoList案例(待办事项)
  • Java高频面试之并发编程-10
  • C++之string
  • 如何在本地部署小智服务器:从源码到全模块运行的详细步骤
  • CA校验主辅小区配置及UE能力
  • 首发记忆行车方案与座舱智能管家,佑驾创新“抢跑”驾舱融合市场
  • 恒流恒压直流充电测试负载设计:构建精准化检测体系
  • 计算机基础:二进制基础14,二进制加法