C# 基于.NET6的CM+Fody+HC入门实战项目(经典)

概述

上期我们概述了CM+Fody+HC,如果之前没有阅读,可以先了解下:

C# 为什么说CM+Fody+HC是WPF开发的最强组合?

今天基于最新的VS版本、最新的CM框架版本,.NET基于6.0,搭建了一个

WPF入门学习项目实例,关于库的nuget引用部分上节已经讲过了,不懂

的看上期.

开发环境:VS2022 

WPF框架:Caliburn.Micro 版本4.0.212

HandyControl:3.3.0

.NET版本:.NET6.0

HC相关的用法网上资料很少,我们直接下载源项目,看示例是最快捷的方式,地址:

https://github.com/AFei19911012/HandyControl

项目创建步骤详述

① 在NUGET上引用相关的库:

133c60c5b12cd2f9678a11331d8004f3.png

②接下来是搭建CM框架:这里可以参考文章:

C# WPF MVVM开发框架Caliburn.Micro快速搭建③

C# WPF框架Caliburn.Micro快速搭建

以上文章对框架大家有详细描述,这里不再详细介绍

③接下里需要在App.xaml中添加HandyControl的资源,最终代码如下:

<Application x:Class="WpfApp5.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp5"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary><local:MyBootstrapper x:Key="bootstrapper"/></ResourceDictionary><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>

然后在对应的XAML页面引用

xmlns:hc="https://handyorg.github.io/handycontrol"

④ 在需要属性变更的类名称前标注:

[AddINotifyPropertyChangedInterface]

然后就可以愉快的玩转CM+Fody+HC.

项目实例代码

前台XAML:

<Window x:Class="WpfApp5.StartView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:cal="http://www.caliburnproject.org" xmlns:hc="https://handyorg.github.io/handycontrol"xmlns:local="clr-namespace:WpfApp5"mc:Ignorable="d"Title="StartView" Height="500" Width="600" WindowStartupLocation="CenterScreen"><hc:TransitioningContentControl><StackPanel><TextBox Margin="0,0,0,32" hc:InfoElement.TitleWidth="70" hc:InfoElement.Placeholder="Necessary" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="Left title" hc:InfoElement.Necessary="True" Style="{StaticResource TextBoxExtend}" Name="TextContent"/><Button Height="48" Width="160" Margin="3" Name="testBtn"Background="{DynamicResource PrimaryBrush}"hc:BackgroundSwitchElement.MouseHoverBackground="{DynamicResource MouseHoverBrush}" hc:BackgroundSwitchElement.MouseDownBackground="{DynamicResource MouseDownBrush}"><Button.Content><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="auto"/><ColumnDefinition/></Grid.ColumnDefinitions><Image Source="pack://application:,,,/Images/icon.ico"/><Label Grid.Column="1" Content="Custom Button" BorderThickness="0" Background="Transparent" Foreground="{DynamicResource TextIconBrush}"/></Grid></Button.Content></Button><ListBox Name="ListBoxItems"  MinHeight="230" Background="LightGray"cal:Message.Attach="[Event SelectionChanged] = [Action ListBoxItems_SelectionChanged($source,$eventArgs)];[Event MouseUp]=[ListBoxItems_MouseUp($source,$eventArgs)]" /><RepeatButton Height="48" Width="160" Content="Repeat Button" Margin="3" Delay="500" Style="{StaticResource RepeatButtonPrimary}" Background="{DynamicResource PrimaryBrush}" Foreground="{DynamicResource TextIconBrush}" hc:BorderElement.CornerRadius="0" Name="RepeatButton_Click"/></StackPanel></hc:TransitioningContentControl>
</Window>

后台ViewModel:

using Caliburn.Micro;
using PropertyChanged;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;namespace WpfApp5
{[AddINotifyPropertyChangedInterface]class StartViewModel : Screen{public StartViewModel(){ListBoxItems = new ObservableCollection<string>() { };ListBoxItems.Add("dotNet编程大全");ListBoxItems.Add("Csharp编程大全");ListBoxItems.Add("dotnet工控上位机编程");}public ObservableCollection<string> ListBoxItems { get; set; }public string TextContent { get; set; }public void testBtn(){TextContent = "hello world!";NotifyOfPropertyChange(() => TextContent);}public void ListBoxItems_MouseUp(object sender, MouseButtonEventArgs e){ListBox listbox = sender as ListBox;MessageBox.Show("当前操作的控件名称是:" + listbox.Name);}public void ListBoxItems_SelectionChanged(object sender, SelectionChangedEventArgs e){TextContent = (sender as ListBox).SelectedItem.ToString();NotifyOfPropertyChange("TextContent");}public void RepeatButton_Click(object sender, RoutedEventArgs e){MessageBox.Show("你点击了按钮RepeatButton");}}
}

CM框架引导程序:

using Caliburn.Micro;
using System.Windows;namespace WpfApp5
{class MyBootstrapper : BootstrapperBase{public MyBootstrapper(){Initialize();//初始化框架}protected override void OnStartup(object sender, StartupEventArgs e){DisplayRootViewForAsync<StartViewModel>();//显示界面}}
}

运行演示:

ecb92cad97bc3299df3f35a69fbdc537.gif

源代码

链接:https://pan.baidu.com/s/1zuFpe-gv6h2L0pCJ_u8JoA

提取码:6666

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP资源列表(转)

一个PHP资源列表&#xff0c;内容包括&#xff1a;库、框架、模板、安全、代码分析、日志、第三方库、配置工具、Web 工具、书籍、电子书、经典博文等等。 初始翻译信息来自&#xff1a;《推荐&#xff01;国外程序员整理的 PHP 资源大全》 该内容也可以在github的相关项目上浏…

当今 计算机已进入千家万户英语,学生英语教学论文,关于信息技术在大学英语教学中的应用探析相关参考文献资料-免费论文范文...

导读:这是一篇与学生英语教学论文范文相关的免费优秀学术论文范文资料,为你的论文写作提供参考。摘 要&#xff1a;随着经济全球化和信息化时代的到来,计算机技术已深入到社会的各个领域.以往大学中所使用的传统面授课教学模式已经跟不上信息时代的发展步伐,不能满足当今教学的…

POJ - 2187 Beauty Contest(最远点对)

http://poj.org/problem?id2187 题意 给n个坐标&#xff0c;求最远点对的距离平方值。 分析 模板题&#xff0c;旋转卡壳求求两点间距离平方的最大值。 #include<iostream> #include<cmath> #include<cstring> #include<queue> #include<vector>…

Kong入门学习实践(2)实验环境搭建

【API网关】| 总结/Edison Zhou最近在学习Kong网关&#xff0c;因此根据老习惯&#xff0c;我会将我的学习过程记录下来&#xff0c;一来体系化整理&#xff0c;二来作为笔记供将来翻看。由于我司会直接使用Kong企业版&#xff0c;学习过程中我会使用Kong开源版。本篇&#xff…

Mysql-索引的基础和类型

一、 索引的基础 索引类似于书籍的目录&#xff0c;要想找到一本书的某个特定主题&#xff0c;需要先查找书的目录&#xff0c;定位对应的页码。 存储引擎使用类似的方式进行数据查询&#xff0c;先去索引当中找到对应的值&#xff0c;然后根据匹配的索引找到对应的数据行 二…

ligerUI的列头合并代码片段

//列头合并 function onAfterShowData(data){//显示数据前触发此事件 console.log(123); var k 0; var tr $(.l-grid-body.l-grid-body1).find(table tr);//找到被冻结的列&#xff08;frozen&#xff09;,利用find方法找到所有的行 $.each($(tr)…

我的未来计算机作文,我的未来作文(精选4篇)

我的未来作文(精选4篇)在平平淡淡的日常中&#xff0c;大家总免不了要接触或使用作文吧&#xff0c;作文根据体裁的不同可以分为记叙文、说明文、应用文、议论文。怎么写作文才能避免踩雷呢&#xff1f;以下是小编收集整理的我的未来作文&#xff0c;仅供参考&#xff0c;大家一…

RDS for MySQL Mysqldump常见问题及处理

2019独角兽企业重金招聘Python工程师标准>>> 摘要&#xff1a; RDS for MySQL Mysqldump 常见问题和处理 GTID 特性相关 避免表级锁等待 设置导出字符集 其他导出时需要注意的选项 举例 RDS for MySQL 不支持的选项 RDS for MySQL 逻辑备份 1. GTID 特性相关 MySQ…

AI求解PDE

一、波动方程的PINN解法: Guo Y, Cao X, Liu B, et al. Solving partial differential equations using deep learning and physical constraints[J]. Applied Sciences, 2020, 10(17): 5917. 二、二维的Navier–Stokes方程组的PINN解法 矢量形式的不可压缩Navier-Stokes方程…

使用CADisplayLink实现UILabel动画特效

在开发时&#xff0c;我们有时候会遇到需要定时对UIView进行重绘的需求&#xff0c;进而让view产生不同的动画效果。 本文项目 效果图 初探 CADisplayLink 定时对View进行定时重绘可能会第一时间想到使用NSTimer&#xff0c;但是这样的动画实现起来是不流畅的&#xff0c;因为在…

《ASP.NET Core 6框架揭秘》实例演示[27]:ASP.NET Core 6 Minimal API的模拟实现

Minimal API仅仅是在基于IHost/IHostBuilder的服务承载系统上作了小小的封装而已&#xff0c;它利用WebApplication和WebApplicationBuilder这两个类型提供了更加简洁的API&#xff0c;同时提供了与现有API的兼容。[本文节选《ASP.NET Core 6框架揭秘》第17章]一、基础模型二、…

Mysql的关联查询语句

一 内连接( inner join&#xff09; 1、多表中同时符合某种条件的数据记录的集合 (取两表公共部分) 2、inner join 可以缩写成 join 例如: select * from A,B WHERE A.idB.id 或者 select * from A inner join B on A.idB.id 内连接分为三类:{ &#xff08;1&#xff0…

高性能Server---Reactor模型

无处不在的C/S架构 在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的&#xff01; 你发邮件用的Outlook,Foxmail等你看视频用的优酷&#xff0c;土豆等你写文档用的Office365,googleDoc&#xff0c;Evernote等你浏览网页用的IE,Chrome等(B/S是特殊的C/S)……C/S架构…

计算机控制系统的试题,计算机控制系统练习题(1)

21. 给出多通道复用一个D/A转换器的原理示意图。 答&#xff1a;22. 什么是信号重构&#xff1f;答&#xff1a;把离散信号变为连续信号的过程&#xff0c;称为信号重构&#xff0c;它是采样的逆过程。23. 写出零阶保持器的传递函数&#xff0c;引入零阶保持器对系统开环传递函…

springmvc_3(将数据放入map中)

jsp页面 结果 转载于:https://www.cnblogs.com/mohehpc/p/6491376.html

怎样用原生js配合css的transition写个无缝滚动

之所以想要写原生js配合css转换的无缝滚动&#xff0c;是因为之前在简书上看到一哥们写的一篇文章&#xff0c;说是在网上找了一堆js配合css transition属性写的轮播插件&#xff0c;可惜没有无缝的效果&#xff0c;结果他用原生js重写了一个可以无缝滚动的。好吧&#xff0c;我…

聊聊策略模式

1、简介策略模式就是把各个平等的具体实现进行抽象、封装成为独立的算法类&#xff0c;然后通过上下文和具体的算法类来进行交互。各个策略算法都是平等的&#xff0c;地位是一样的&#xff0c;正是由于各个算法的平等性&#xff0c;所以它们才是可以相互替换的。虽然我们可以动…

小学计算机课每周几节,小学信息技术课时多少

满意答案小学信息技术课程标准一、课程任务和教学目标中小学信息技术课程的主要任务是&#xff1a;培养学生对信息技术的兴趣和意识&#xff0c;让学生了解和掌握信息技术基本知识和技能&#xff0c;了解信息技术的发展及其应用对人类日常生活和科学技术的深刻影响。通过信息技…

张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结

20162329 2006-2007-2 《Java程序设计》第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机不可用所以我在Windows中安装了bash和git&#xff0c;但是由于Windows下bash中没有中文而且我英语又不是很好所…

《图解 HTTP》读书笔记(未完待续)

ARP 协议&#xff08;Address Resolution Protocol&#xff09;一种以解析地址的协议&#xff0c;根据通信双方的 IP 地址就可以查出对应的 MAC 地址。MAC&#xff08; Media Access Control Address&#xff09;地址是指网卡所属的固定的地址MIME&#xff0c;多部分对象集合&a…