2011年6月22日 星期三

如何安裝與使用Code Snippet

在昨天的研討會中,Live Demo的部分,為了節省Key程式碼的時間,我把常用的WP7.1 API部分的功能整理成了Code Snippet(程式碼片段),這是Visual Studio中非常貼心的設計,讓開發人員的創作速度大增,且相對提高了Coding的正確性。

研討會中Demo的WP7.1的CodeSnippet整理如下:[下載]

使用方法教學影片:

2011年6月21日 星期二

微軟 Microsoft Developer Day 2011 ...


很感謝大家今天熱情參與微軟 Microsoft Developer Day 2011 ...
今天提到的Mango SDK可從此處下載。

今天的投影片可從此處下載。
相關的範例展示影片可參考此頁面

2011年6月13日 星期一

Visual Studio 中,VB開發人員熟悉的Shift-F2與Ctrl-Shift-F2

如果你和我一樣,過去是寫了很多年的VB開發人員(雖然現在多半寫C#, 但我還是很熱愛VB),你應該很熟悉兩個hot key, Shift-F2(跳入特定的Method), 以及Ctrl-Shift-F2(返回原位置),這兩個Hot key對於程式開發的效率有著莫大的幫助。

到了C#開發環境,這兩個Hot-Key不見了,找了一陣子,終於發現這兩個HotKey分別是 Edit.GoToDefinition:
與View.NavigateBackward,
透過VS2010的Option->Environment->Keyboard就可以設定了。

2011年6月11日 星期六

Silverlight 4 ListBox Gesture 手勢捲動功能

由於最近我們公司,配合下半年度平板電腦的火熱上市,整個將透過Silverlight開發的產品或功能都一律加上Gesture的支援。這讓Silverlight所開發出來的App,跑在目前坊間的Win7平板上所呈現出的效果比起iPad或Android上的App一點都不遜色且有過之而無不及。

然而Silverlight 4不像WP7那麼好命,每一個ListBox或具有卷軸的控制項(例如ScrollViewer)都內建支援Gesture的功能,因此即便跑在平板電腦上,ListBox都需要用卷軸拖曳的方式來捲動,但明明Silverlight就支援Gesture,不能用手勢捲動ListItem似乎有些遜色。

因此我在網路上找到了這組好用的Behavoir...
http://lighttouch.codeplex.com/

下載之後,在你的專案中引用底下幾個.dll即可。
Wintellect.Touch.dll
System.Windows.Interactivity.dll
System.Windows.Input.Manipulations.dll

如果你想要將ListBox加上Gesture功能,只需要把ListBoxTouchScrollBehavior拖曳到ListBox上:

接著,幫ListBox設計一個ItemPanel,例如(關鍵在GestureListener),完成後大致如下:
最後,幫ListBox的設計一個包含GestureListener Behavior的ItemTemplate即可:


你可以從底下這邊看到預覽的效果:
blog.studyhost.com/BlogData/20110611/SilverlightApplication9TestPage.html
 
你會發現,如果你有支援Multi-Touch的顯示器或是Win7平板電腦,整個手勢拖曳的動作非常順暢,即便你沒有多點觸控設備,這個.dll也支援用滑鼠模擬Gesture,算是挺不錯的設計。

完整的範例程式碼可參考這裡


分享

2011年6月9日 星期四

Windows Phone 7 - Mango (sdk 7.1 beta) First Look - secondary Tile 自訂動態方塊磚

新的Mango,有許多好用的新功能,當然,承襲著Windows Phone 7獨樹一格的UI設計,動態磚早已深受好評,而Mango SDK中動態磚的控制功能當然就是開發人員期待已久的。

過去動態磚之所以這麼命名,就是因為他能動,但過去要能動,似乎要耍點特權,我們第三方應用程式,不僅動態磚非得配合Notification,而且還沒有那種很炫的動態效果,似乎有點差強人意。

在這個版本, 終於,我們可以寫出會動的方塊磚了,而且,還可以一次產生多個,我們甚至可以讓每一個動態磚,在被點選的時候帶入不同的參數到我們所撰寫的程式中:



怎麼做的呢?
主要的API在Microsoft.Phone.Shell命名空間,開發人員可以透過底下的程式碼來建立自己的方塊磚:
//方塊磚資料
            StandardTileData NewTileData = new StandardTileData
            {
                BackgroundImage = new Uri("/Images/People.png", UriKind.Relative),
                Title = "方塊磚",
                Count = int.Parse(textBox2.Text),
                BackTitle = "參數是" + this.textBox1.Text,
                BackContent = "方塊磚的背面",
                BackBackgroundImage = new Uri("/Images/PeopleSay.png", UriKind.Relative)
            };

            // 建立方塊磚
            ShellTile.Create(new Uri("/MainPage.xaml?TileID="+this.textBox1.Text, UriKind.Relative), NewTileData);

方塊磚依照Create()方法所傳入的NavigationURL來做區隔,動態磚資訊的描述則是透過上面程式碼當中StandardTileData這個物件來決定。


每個方塊磚在點選的時候,可以帶入不同的參數,你會看到我們的範例中,可以在主頁面依序產生多個不同的方塊磚,每個方塊磚都可以有各自的背景圖,和動態背面背景圖與提示文字。

這種用程式碼產生的動態方塊磚我們稱之為 Secondary Tile, 而傳統的方塊磚(使用者自己按著App然後Pin到Start主畫面中的,我們稱之為Application Tile,後面再為大家介紹更多的內容。


廣告一下...更多相關的內容與範例,可以參加Microsoft 2011 Developer Day...
http://www.bnext.com.tw/edm/2011Developer/index.html


分享

2011年6月8日 星期三

還真的有Bug...

故事是這樣的...

我們公司寫的Silverlight應用程式在正式上線後,客戶用得很開心,對於這個技術和開發人員的努力頗有好評,正當我們被客戶讚的輕飄飄,準備明天跟客戶端的老大demo的時候,前線傳來一個令人錯愕的消息...

用我們寫應用程式的電腦會當...在客戶端3台不同的電腦測試,就像機器得了機瘟一樣,早上還OK,突然間下午全當了,只要進入某一個畫面之後, IE就當給你看,Chrome也死給你看,FireFox就懶得測了。

Demo在即,碰到這種事情,非出面不可了...詭異的是,在家裡連到客戶端的網站,一切OK,我們公司沒有一台機器有問題,都算是很順,只好去客戶那邊看看。到了客戶端,正如客戶所說,沒有一台電腦能夠正常執行,而且客戶強調,早上還OK,就到下午,全不能動了...>_<

這...也太誇張了吧。

測試結果正如客戶所說,很清楚明顯的Run Silverlight的瀏覽器就是卡在那邊不動。
那...到底在run什麼呢? 看不太出來,因為我們知道程式碼只是call一個WCF Services,並且把一堆字串傳到用戶端。當然,我們懷疑過字串的大小,但經過測試,其實才幾十k,比圖片小多了。況且早上都還OK,怎麼下午就不能動了,碰到網路傳輸瓶頸也不會這樣才對。

更詭異的是,如果有資料傳輸的瓶頸,那為何在我們公司OK呢?
CPU / RAM / GPU / intranet performance 都測過之後,突然間想到,似乎客戶端所有的PC都是XP,而我們公司所有的PC都是Win7...

果然,在客戶端換了Win7之後,一切正常,回公司換了XP之後,IE當掉。同樣的一段code,怎麼會這樣呢?到底是什麼code有這麼大的魔力...答案如下:
if(arg.Result.IndexOf("Info")==0) return; 
arg.Result是一個string, 如果有經驗的Silverlight developer應該猜的到,這是WCF Services的回傳值,很單純,內容就是字串。

那為何會讓XP當掉呢?又為何Win7沒事呢...答案是...我也不知道...不過好在我不是第一個碰到這個問題的人...請參考底下...
http://connect.microsoft.com/VisualStudio/feedback/details/615069/silverlight-4-code-using-indexof-startswith-endswith-default-overloads-very-slow-for-xp-browsers

https://connect.microsoft.com/VisualStudio/feedback/details/629358/performance-problem-string-indexof-and-string-startswith

今天碰到這個問題,我們還沒有時間去找微軟是否已經提出了解決方案(或是SL5才會修正),但先列出來提供開發人員參考,也作為紀念,而我們的AP當然先workaround了,畢竟本來的寫法也不是個很有效率的做法,倒是Silverlight會有這個問題頗讓人訝異的。
分享

2011年6月4日 星期六

LinqToSql 範例

前幾天在上課的時候,提到了微軟的ORM技術,當然談到了LinqToSql和ADO.NET EF。

過去習慣在.NET 2.0開發應用程式的學員們,自然對Linq語法不是很熟悉,但坦白說,一開始我也很不習慣,但改用Linq一段時間之後,開發速度確實提高了很多,很自然的,現在幾乎不管寫哪一種Code(SL, ASP.NET, class...etc)我依舊都會用到Linq...

連去學校上課也都捨棄ADO.NET直接教Linq,原因是,大一大二的學生,在具備了基本的OO概念之後,要存取資料庫,以Linq搭配ORM,可以省去了學習SQL語法的動作。

前幾天學員問到了Linq的語法實在不是很熟,例如Join怎麼下呢? 如何取得Max或avg呢?,有沒有可以參考的網頁,當然有,就在這裡了...

http://msdn.microsoft.com/en-us/vcsharp/aa336746 (C#)
http://msdn.microsoft.com/en-us/vbasic/bb688085 (VB)


分享