Time of Update: 2018-12-07
昨晚看到南柯之石的WPF
Time of Update: 2018-12-07
今天同事給出了個問題。研究了很久才想到一些可行的方案。大家也試試看啊。問題是這樣的:給你一個隨機數函數Rand(),這個函數返回從1到5均勻分布的隨機數。讓你寫一個函數,返回從1到7均勻分布的隨機數。 一定要均勻分布哦。 所以像這樣的答案是不行的。(Rand() + Rand()) %7 + 1這樣產生的數不是均勻分布。(應該是常態分佈的)自己的方案太醜惡了,暫時就不拿出來了。大家可以先試試看。
Time of Update: 2018-12-07
我是一個土生土長的北方人,來到了上海一年多了,過著其實無論在哪兒都一樣的生活——吃飯、工作、睡覺。但是安靜的時候,常常感覺自己的生活缺了點什麼,可是又說不上來。尤其到了年底,這種感覺就越發強烈起來。 晚飯沒有像平時一樣在公司吃。回到家裡,吃著剛買回來的餃子,想起了兒時在家過年的情景。 不懂事的時候就發現,哪天早晨起來,吃的是臘八粥,那麼就快要過年了,就要發壓歲錢了。這一天,家裡人還會剝些蒜,泡在醋裡準備過年的時候吃。就是北方人熟知的臘八蒜。到了大年三十兒的晚上,家家都會開著屋子裡所有的燈“守年關
Time of Update: 2018-12-07
正在做的一個項目就是用WPF做的。項目初期做DEMO時也是,同時也是CTO推薦的。但是CTO的考慮卻和我們不一樣。 記得做DEMO時,把東西給CTO看後,得到的反饋之一是,為什麼用WPF做這麼點兒功能用了這麼久?怎麼還要寫邏輯? 不知道CTO是不是只看過WPF的廣告,而沒有自己涉足過。似乎在CTO的觀念中,WPF是可以極大地減少代碼邏輯,增加開發效率的新技術。如果XAML不屬於代碼的話,前半句算是正確的。但是後半句無論如何是不能做為結論的。要完成功能,就要有邏輯,無論用什麼技術,總要把邏輯完整地
Time of Update: 2018-12-07
衝突的地方就在於表單應該不應該有左上方的表徵圖?不知大家平時有沒有注意這個問題? 這個誰說都沒有用,看看微軟的已經有的軟體,主表單都有,從主表單彈出的絕大多數子表單都沒有。再來看看微軟自己的UX Guide上是怎麼說的。 Title bars● Dialog boxes don’t have title bar icons. Title bar icons are used as a visual distinction between primary windows andsecondary
Time of Update: 2018-12-07
在上一篇在NSIS中實現安裝時取消並復原(1)——現狀中分析了現在NSIS對取消安裝並復原功能的支援。結論是目前NSIS本身還不支援,需要自己完成這個功能。下面就來介紹一種相對比較簡單的實現方式。 功能痛點在上一篇中已經有描述,這裡就不贅述了。基本原理就是在安裝過程中,使用外掛程式中把背景釋放檔案的線程掛起,問使用者是不是真要取消安裝,是的話就使用安裝過程中產生的Log檔案進行復原,不是的話就讓被掛起的線程繼續運行。 大致要解釋如下幾個問題1. 編寫線程式控制制外掛程式。2.
Time of Update: 2018-12-07
現在很多程式都提供了搜尋功能。比如MSN的Search Contract,VS和Blend裡的Property Search。一般是從一個比較大的,使用者不太方便尋找的列表中按關鍵字搜尋合格項目。如所示。 下面就來介紹一下這個功能在WPF中的實現。對WPF的類庫功能不太熟悉的人可能會想到下面幾個解決方案。 1. 根據關鍵字,對List綁定到的資料來源進行修改,把不符合關鍵字的資料項目暫時移出列表。這個就不評價了,入門選手的方案。效能和代碼量都能讓你瞠目結舌。 2.
Time of Update: 2018-12-07
這幾天又拿來《CLR via C#》翻看,想了幾個.NET方面的問題,加上在公司和同事們交流時遇到的問題。大家有興趣可以看看,能不能回答上來呢? 1. 為什麼要顯式地關閉StreamWriter?2. 如何正確地重寫GetHashCode方法?(這個是最簡單的)3. C#編譯器為什麼要用callvirt指令調用執行個體的非虛方法?4. struct可以繼承嗎?為什嗎?可以有虛方法嗎?為什嗎?5.
Time of Update: 2018-12-07
想瞭解一下MVVM的具體實現,所以就寫個小程式實際用用,結果用的時候發現了一個問題。想問問大家的意見,有沒有什麼比較合適的解決方案。這個小程式大體分了了M,VM,V三層,一層一個DLL。(也許這就有問題……)其中VM層裡定義了Command。V層裡都是表單類。關係是:V使用VM和M,VM使用M。問題是這樣的:有一個Command(在VM層)需要表單的切換(跳轉),但是從VM層又無法直接使用V層的表單類。一時不知道用哪種方式實現比較好。自己想到的有這樣幾個方法。1.
Time of Update: 2018-12-07
這裡的新技術不是指新近發布的技術,而是你不知道,或是沒有使用過的技術或編程方式。抵觸也不是說不願意學習,而是指不願意改變現狀。 比如曾經遇到過的一個例子,有人自己寫了一個判斷一個元素是否已經存在於一個List中的函數。我以為他有什麼特定的需求,結果一問才知道是因為他不知道List有Exists函數。 這個是最簡單的情況。 在寫程式的時候,有時就會遇到這樣類似的情況。由於自己對架構不是很瞭解,自己花了很長時間去做了一個架構中已經實現了的功能。這個時候你會把自己寫的代碼全部刪除然後使用架構中內建的方
Time of Update: 2018-12-07
在幾個.NET方面的問題中,列出了幾個.NET方面的問題,但是沒有給出問題的答案,因為對於一部分問題我自己也不是很確定。這次只是給出一個參考答案,僅僅作為參考。如有不對的地方,歡迎大家指正。 1.
Time of Update: 2018-12-07
從.NET 3.0發布至今,.NET Framework相繼發布了.NET 3.5和.NET3.5 SP1。其間做了兩個基於WPF的項目。發現現在的WPF的BUG真的是不算少。給程式的開發帶來了不少的困擾——為了避開BUG,而不得不多寫很多代碼。 這個“WPF BUG清單”系列,將列出筆者在項目中遇到過的WPF的各種問題,也許不一定是BUG,但是會造成開發上的不便。更感覺WPF的第一次發布實在有趕鴨子上架的嫌疑。很多東西都還沒有做就發布了。(跟Silverlight
Time of Update: 2018-12-07
今天有同事給一個WPF程式的後台邏輯寫UT,用的是NUnit架構,寫之前感覺UI不好寫UT,給後台邏輯寫UT應該是沒有什麼問題,但是寫開了才發現問題。 問題就出在了後台邏輯擷取資源的部分,代碼類似下面。 Application.Current.Resources[XXXX] 運行時拋出NullReferenceException,Application.Current為null。 很好理解,當前由於是用NUnit測試後台DLL,這時這個程式是基於WinForm的,而代碼中要獲得的是WPF
Time of Update: 2018-12-07
首先聲明一下:有人早就發現了這個問題,發過了文章,也已經有微軟的人說這是“by design”的行為。但是我依然對這個詭異的行為表示不可理解。所以發上來,看看大家的見解。 範例程式碼非常之簡單。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><Window x:Class="HiddenCaret.DemoWindow" xmlns="
Time of Update: 2018-12-07
這個Bug可以簡單描述為:在使用OpenFileDialog嘗試開啟一個不存在的檔案的時候,OpenFileDialog本身會建立這個不存在的檔案並刪除它,然後告訴使用者這個檔案不存在。 下面我們來寫個程式來重現這個Bug。基本原理是使用FileSystemWatcher來監看資料夾。 建立使用了1所示的程式。 圖1. 樣本程式 首先選擇一個檔案夾,並監視裡面的檔案改變。 圖2.
Time of Update: 2018-12-07
1. 視窗管理 你很可能已經看到了Windows7使視窗管理變容易很多:你只要拖動視窗拱到螢幕邊緣,就能把它“dock”到螢幕的左半邊或者右半邊;類似的,你可以把視窗拱到螢幕頂部來最大化,雙擊上/下邊框把視窗寬度不變而高度最大化。你可能不知道的是所有這些動作都有快速鍵: Win+左箭頭 和 Win+右箭頭 靠左/右dock;Win+上箭頭 和 Win+下箭頭 最大化和回複/最小化;Win+Shift+上箭頭 和 Win+Shift+下箭頭
Time of Update: 2018-12-07
俗話都知道,就不說了。 但是到了工作上,就沒有這麼簡單了。 每個人都有不同的工作習慣: 有的人工作效率高,但是沒有耐心,坐不住;有的人工作效率低,但是很有定力,一坐一天。 有的人晚上很精神,傾向於晚上加會班;有的人早晨頭腦才清醒,到了下午工作效率就下降。 但是不同的人總要在一起工作。於是總會要有衝突: 工作效率高的心裡歧視工作效率低的,覺得這麼點兒工作也做這麼久。有耐心的人看見沒有耐心的,可能就有意見,想自己一天忙到晚,他怎麼老是開小差,看網頁?真沒有天理。 傾向於晚上加班的又會抱怨回家早的,認
Time of Update: 2018-12-07
製作服務端程式的安裝包,常常要建立資料庫和其中的表。在建立之前,應該檢測一下這個資料庫是否已經存在了,如果已經存在,那麼彈出訊息框問使用者是不是要覆蓋現有的資料庫資料。這裡是一個使用NSIS製作安裝包時的檢測方法。 檢測部分的NSI代碼如下: nsExec::Exec 'sqlcmd -S .\SQLEXPRESS -d SampleDB' Pop $0 IntCmp $0 1 Update
Time of Update: 2018-12-07
小區裡有一家街客奶茶店。之前喝過不少的街邊的奶茶店,唯獨這一家讓我喝了兩次以上。因為在這個5元一杯的價位上,這家店是我見到的唯一家,真正使用茶水和牛奶調配奶茶的。在別家的店(包括很多其它街客店),只要看到裡面的店員是把粉狀的東西倒在杯子,然後加水就完事兒的,我向來是不會買的。 也許是第一次喝的奶茶比較正宗,才會對奶茶如此的挑剔。記得那是很多年前在仙蹤林喝的一杯奶茶15、6塊,喝上去真的就是有奶味,也有茶味。以至於之後喝優樂美、雀巢、香飄飄、立頓之類的奶茶精,喝第一口,就知道裡面沒有奶,也沒有茶。
Time of Update: 2018-12-07
DoubleAnimation接著上一篇使用的是XAML來實現動畫的效果,今天我們用代碼來實現下:我們在表單上放一個Rectangle,對這個Rectangle實現寬度的變化。當我們按下按鈕來觸發它的寬度變化。具體代碼如下: private void button1_Click(object sender, RoutedEventArgs e) { DoubleAnimation doubleAnimation = new DoubleAnimation()