这篇文章还是在之前用Caliburn.Micro搭建好的框架上继续做的开发,今天主要是增加了一个用户窗体ImageProcessView,然后通过Treeview切换选择项之后在界面显示不同效果的图片。

01

重要的知识点

本篇内容基于CM框架编写,涉及以下知识点:

①实现 INotifyPropertyChanged:在mvvm开发模式中,为了前台和后台更好的解耦合,前台界面一般通过绑定属性的方式获取属性值,而后台属性值变更后我们需要通知给前台视图,这时候我们的属性值就需要实现INotifyPropertyChanged这个接口。

由于StartViewModel继承了Caliburn.Micro.Screen,Caliburn.Micro.Screen实现了INotifyPropertyChanged,所以StartViewModel这个类本身是拥有属性变更通知界面的功能的。但是我们添加的窗体ImageProcessViewModel除了它的构造函数是在StartViewModel中实例化(拥有了INotifyPropertyChanged),其它想要实现这个接口有两种方式:

-. 继承Caliburn.Micro.Screen,即:

public class ImageProcessViewModel : Caliburn.Micro.Screen

  -. 在nuget中引用PropertyChanged.Fody

并在类之前添加:

[AddINotifyPropertyChangedInterface]

  这样我们的这个类中所有的属性变更后就会主动通知界面更新了!

②TreeView用法实例:

主要包括TreeView树列表构建以及事件附件

<TreeView Grid.Row="0" Grid.Column="0" Grid.RowSpan="1">
<TreeViewItem Header="TreeView">
<TreeViewItem Header="TranslateTransform"/>
<TreeViewItem Header="RotateTransform"/>
<TreeViewItem Header="ScaleTransform"/>
<TreeViewItem Header="SkewTransform"/>
<TreeViewItem Header="TransformGroup"/>
<TreeViewItem Header="MatrixTransform"/>
</TreeViewItem>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}" >
<Setter Property="cal:Message.Attach" Value="[Event Selected] = [Action item_SelectedItemChanged($source,$eventArgs)]"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>

  后台代码,重点是如何获取当前选择的Item:

public void item_SelectedItemChanged(object sender, RoutedEventArgs e)
{
TreeViewItem tvi = e.OriginalSource as TreeViewItem;
var selectedItem = tvi.Header.ToString();
switch (selectedItem)
{
case "TranslateTransform":
MessageBox.Show("这是一个图片平移效果"); Image1Show = Visibility.Visible; break;
case "RotateTransform":
MessageBox.Show("这是一个图片旋转效果"); Image2Show = Visibility.Visible; break;
case "ScaleTransform":
MessageBox.Show("这是一个图片缩放效果"); Image3Show = Visibility.Visible; break;
case "SkewTransform":
MessageBox.Show("这是一个图片扭转效果"); Image4Show = Visibility.Visible; break;
case "TransformGroup":
MessageBox.Show("这是一个图片组合效果"); Image5Show = Visibility.Visible; break;
case "MatrixTransform":
MessageBox.Show("这是一个图片矩阵效果"); Image6Show = Visibility.Visible; break;
default: break;
}
}

  ③图片显示效果,需要了解RenderTransform类,主要实现以下6中效果:

一. RenderTransform类的成员:

1.TranslateTransform   平移效果

2.RotateTransform     旋转效果

3.ScaleTransform         缩放效果

4.SkewTransform        扭转效果

5.TransformGroup    组合效果

6.MatrixTransform    是其他几个变形类的基类,矩阵方式实现效果

这里的代码较长,可以下载项目源码查看.

二. Visibility属性:

WPF的Visibility属性是个枚举变量,有三种值:Collapsed、Hidden、Visible。

Collapsed与Hidden区别:Hidden仅仅是属性设为不可视,但是属性在画面上依然占有空间。然而使用Collapsed的话,在不可视的基础上,它还能将属性在画面上的占位符清除,属性将彻底不影响画面

namespace System.Windows
{
public enum Visibility : byte
{
Visible = 0,
Hidden = 1,
Collapsed = 2
}
}

  后台定义,切记给属性添加get; set;权限,不然界面不会更新

 public Visibility Image6Show { get; set; } = Visibility.Hidden;

在前台绑定就好:

Visibility="{Binding Image6Show}"

三. Image Stretch属性值详解:

namespace System.Windows.Media
{
public enum Stretch
{
None = 0,
Fill = 1,
Uniform = 2,
UniformToFill = 3
}
}

  None :保持原始尺寸,图片会按原始大小显示

Fill: 缩放到目标尺寸,宽高比不会保留, 图片会按原始大小显示

Uniform:缩放到目标尺寸之内,并保持原始宽高比。图片会按照设置的Width和Height显示,比例会失调

UniformToFill:保持原始宽高比进行缩放,以填充。如果两者的宽高比不同,源会被剪切掉多余的部分。

02

结尾

项目源码网盘下载地址

链接:https://pan.baidu.com/s/1uP1Lw96Br1csLaF4B7ZKpw

提取码:  a365

技术群:添加小编微信zls20210502,备注进群

C# WPF MVVM项目实战(进阶②)的更多相关文章

  1. C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号、密码)

    原文:C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号.密码) 目录: 1,界面设计 2,数据模型的建立与数据绑定 3,添加QQ数据 4,修改QQ数据 5,删除QQ数据 6,密码选 ...

  2. 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01

    书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...

  3. 项目实战12.2—企业级监控工具应用实战-zabbix操作进阶

    无监控,不运维.好了,废话不多说,下面都是干货. 流量党勿入,图片太多!!! 项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html 一.U ...

  4. mxgraph进阶(三)Web绘图——mxGraph项目实战(精华篇)

    Web绘图--mxGraph项目实战(精华篇) 声明     本文部分内容所属论文现已发表,请慎重对待. 需求 由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式 ...

  5. AngularJS进阶(三十九)基于项目实战解析ng启动加载过程

    基于项目实战解析ng启动加载过程 前言 在AngularJS项目开发过程中,自己将遇到的问题进行了整理.回过头来总结一下angular的启动过程. 下面以实际项目为例进行简要讲解. 1.载入ng库 2 ...

  6. 【WPF入门视频】Microsoft ToDo 应用项目实战

    项目实战视频地址 第一天 第二天 第三天 第四天 第五天 第六天 项目实战源代码下载地址: 项目源代码下载

  7. WPF MVVM 验证

    WPF MVVM(Caliburn.Micro) 数据验证 书接前文 前文中仅是WPF验证中的一种,我们暂且称之为View端的验证(因为其验证规是写在Xaml文件中的). 还有一种我们称之为Model ...

  8. WPF MVVM初体验

    首先MVVM设计模式的结构, Views: 由Window/Page/UserControl等构成,通过DataBinding与ViewModels建立关联: ViewModels:由一组命令,可以绑 ...

  9. angularJs项目实战!01:模块划分和目录组织

    近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap ...

随机推荐

  1. 【springcloud】Eureka服务注册中心搭建

    转自:https://blog.csdn.net/pengjunlee/article/details/86538997 Spring Cloud是一系列框架的集合,它利用Spring Boot的开发 ...

  2. 复习git

    git 常用点,详解 from my typora 文章目录 git 常用点,详解 git 模式解析 删除文件 方式一: 方式二: 远程库 配置忽略文件 查看版本库日志,以及版本回退 解决冲突 替换我 ...

  3. python matplotlib 绘图+显示数值

    参考:https://www.jb51.net/article/152685.htm 用plt.text函数 import numpy as np import matplotlib.mlab as ...

  4. Install Percona XtraDb Cluster 5.6.20 on CentOS 6.5

    http://blog.51cto.com/hj192837/1546149 You should have odd number of real nodes. node #1hostname: pe ...

  5. 【进阶之路】持续集成、持续交付与持续部署(CI/CD)

    由来 记得7月份刚刚换工作的时候,中午和老大一起去吃饭,回来的路上老大问我:"南橘,CI/CD有没有研究过?" 我隐隐约约在哪里听过这个名词,但是又想不起来,秉着实事求是的态度,我 ...

  6. Python脚本导出AWS EC2资源清单

    环境需求 单位现在每隔一段时间需要核对一下 AWS 正在运行的 EC2 资源清单,为了避免核对失误以及重复性的工作,打算用脚本来解决这一重复性的工作.大概思路为 通过 AWS AK.SK 来索取 AW ...

  7. Linux复习笔记-001-进程的管理

    1.什么是进程? 进程是已经启动的可执行的程序运行实例. 程序是二进制文件,静态 ./bin/date/ /usr/sbin/ 进程:是程序运行的过程 2.Linux为1的进程? centos5或6为 ...

  8. MySQL——MySQL安装

    1.rpm yum安装:安装方便.速度快.无法定制 2.二进制安装:解压即可使用,不能定制功能 3.编译安装: 可定制.安装慢: MySQL5.5之前:./configure make make in ...

  9. Spring系列之集成MongoDB的2种方法

    MongoDB是最流行的NoSQL数据库,SpringBoot是使用Spring的最佳实践.今天带大家讲一讲SpringBoot集成MongoDB的两种方式,MongoDB的安装自行去官网查询,本地开 ...

  10. git 提交本地项目

    在新文件夹中] 1.右键 git bash here,执行 2.git init 生成.git文件,存在则跳过 依次执行 1.git add . 2.git commit -m "提交信息& ...