這串代碼很簡單。動畫
加入了一些音效和簡單的動畫效果。編碼
.net5的wpf版本跟之前.net framework編碼方式沒有任何區別。spa
簡單說一下所用的一些技術吧。.net
檢測鼠標進入事件日誌
當鼠標進入放置至【想得美】按鈕時,這個按鈕進行移動。code
//獲取當前可用範圍內高寬 var pH = (int)(panel.ActualHeight - btnNo.ActualHeight); var pW = (int)(panel.ActualWidth - btnNo.ActualWidth); //隨機生成座標 var y = rd.Next(pH); var x = rd.Next(pW); btnNo.SetValue(Canvas.TopProperty, (double)y); btnNo.SetValue(Canvas.LeftProperty, (double)x);
這樣的話,幾乎她是不可能點中這個按鈕的。不是特完美,也有可能出現,隨機位置與原有位置相重疊的狀況。blog
WPF動畫的支持是很是簡單的,我便加了個動畫上去。事件
readonly DoubleAnimation dh = new DoubleAnimation(); readonly DoubleAnimation dw = new DoubleAnimation(); private void btnNo_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) { //獲取當前可用範圍內高寬 var pH = (int)(panel.ActualHeight - btnNo.ActualHeight); var pW = (int)(panel.ActualWidth - btnNo.ActualWidth); //隨機生成座標 var y = rd.Next(pH); var x = rd.Next(pW); //btnNo.SetValue(Canvas.TopProperty, (double)y); //btnNo.SetValue(Canvas.LeftProperty, (double)x); dh.From = (double)btnNo.GetValue(Canvas.TopProperty); dw.From = (double)btnNo.GetValue(Canvas.LeftProperty); dh.To = y; dw.To = x; btnNo.BeginAnimation(Canvas.LeftProperty, dw); btnNo.BeginAnimation(Canvas.TopProperty, dh); }
主要使用的即是 DoubleAnimation 這個類。當前也可使用Blend繪製,我的以爲Blend會使得xaml代碼很亂,便手寫了幾行。圖片
.Net程序中資源文件的讀取資源
點擊 【好呀】 後,會有音樂聲,因此有資源文件的嵌入。
using System;
using System.Reflection;
using System.Resources;
public class AssemblyResource
{
public static byte[] GetAccseeblyPic(Assembly assembly, string imgKey)
{
string[] names = assembly.GetManifestResourceNames();
byte[] dataByte = null;
foreach (string name in names)
{
using ResourceReader rr = new ResourceReader(assembly.GetManifestResourceStream(name));
try
{
rr.GetResourceData(imgKey, out _, out byte[] tmpByte);
dataByte = new byte[tmpByte.Length - 4];//去除多餘的字節
Array.Copy(tmpByte, 4, dataByte, 0, dataByte.Length);
break;
}
catch
{
continue;
}
}
return dataByte;
}
/// <summary>
/// 獲取當前程序集中的image
/// </summary>
/// <param name="imaKey">圖片名字</param>
public static byte[] GetCurrentAccseeblyData(string imaKey)
{
return GetAccseeblyPic(Assembly.GetEntryAssembly(), imaKey);
}
}
上面紅色代碼部分有知道的緣由的嗎?能夠說說。哈哈,不少年前分析頭文件的代碼了取資源的代碼了,直到今天也沒搞懂多出的4個字節是什麼鬼。
原本是想作個單文件程序的,可是經過 dotnet publish -r win-x86 -c Release -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:PublishReadyToRun=true --self-contained true 此命令發佈出來的程序(加上-p:IncludeNativeLibrariesForSelfExtract=true)卻沒法運行,看了一日誌,說是運行時錯誤,就沒深刻下去了。年紀大了,懶的一逼。
音樂播放代碼
var bytes = AssemblyResource.GetCurrentAccseeblyData("assests/ok.wav");
MemoryStream ms = new MemoryStream(bytes); Audio = new SoundPlayer(ms); Audio.Play();
窗體背景設置
<Window.Background> <ImageBrush ImageSource="/Assests/love.jpg"/> </Window.Background>
差很少了去這裏下載源代碼吧!或加Q羣427121410 找羣主
https://545c.com/d/24904474-42399455-40f79a(訪問密碼:6050)