当前位置: 首页 > 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
   

相关文章:

  • 快速了解Go+rpc
  • MATLAB画一把伞
  • React Three Fiber 详解:现代 Web3D 的利器
  • Vue3取消网络请求的方法(AbortController)
  • jmeter-Beashell获取http请求体json
  • Flutter:组件10、倒计时
  • python如何流模式输出
  • rsync命令详解与实用案例
  • SQLyog中DELIMITER执行存储过程时出现的前置缩进问题
  • 全局id生成器生产方案
  • 23种设计模式-行为型模式之中介者模式(Java版本)
  • 【C++】模板为什么要extern?
  • Cursor —— AI编辑器 使用详解
  • PDF Shaper v15.0
  • vscode chrome调试怎么在所有浏览器都好使
  • 客运从业资格证考试科目有哪些
  • 1.1探索 LLaMA-Factory:大模型微调的一站式解决方案
  • RabbitMQ Linux 安装教程详解
  • 双系统,bios默认设置启动ubuntu+ubuntu改启动grub设置
  • 【仿真】Ubuntu 22.04 安装MuJoCo 3.3.2
  • “人工智能是年轻的事业,也是年轻人的事业”,沪上高校师生畅谈感想
  • 2024“好评中国”网络评论大赛结果揭晓
  • 运动健康|不同能力跑者,跑步前后营养补给差别这么大?
  • 三大白电巨头去年净利近900亿元:美的持续领跑,格力营收下滑
  • 金融创新破局记:中小微企业转型背后的金融力量
  • 俄外长与美国务卿通电话,讨论俄美关系及乌克兰问题