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.pswp.cn/news/282705.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282705.shtml
英文地址,請注明出處:http://en.pswp.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…