發表文章

在WP7中方向感應器的偵測(Accelermoter)

在目前新的手機上都配有方向感應器(或是稱加速度計?),很常見的用途是當你的手機改變方向的時候,畫面也可以隨著方向的變更進行自動的切換,這真是一個很優的功能;或是一些類似賽車等的小遊戲,甚至不需要方向鍵來操控方向,直接用偵測器來偵測手機擺動的方向,玩起來更有感覺;那麼在WP7中應該要怎麼去抓目前手機的方向出來呢? 下面簡單的做個測試,首先要先引入命名空間 using Microsoft.Devices.Sensors; 之後利用Accelerometer類別就可以偵測了,主要必須要處理ReadingChanged的事件,例如下面的方式 try { Sensor = new Accelerometer(); Sensor.ReadingChanged += new EventHandler (Sensor_ReadingChanged); Sensor.Start(); tbState.Text = "Accelermoter detect started"; } catch (AccelerometerFailedException) { tbState.Text = "Start Acceleromter error"; } 事件處理的程式碼部分大致會像是下面這樣子 void Sensor_ReadingChanged(object sender, AccelerometerReadingEventArgs e) { this.Dispatcher.BeginInvoke(() => ReadingChanged(e)); } void ReadingChanged(AccelerometerReadingEventArgs e) { tbData.Text = "X: " + e.X.ToString() + Environment...

在WP7複寫硬體返回鍵的動作

在WP7中的硬體按鍵中,返回鍵預設的功能是返回上一頁,或是返回上一個執行的App;而在開發WP7的應用程式時,有時我們必須去處理這個動作,例如說目前的頁面是給使用者填入資料用的,在接收到硬體返回鍵的動作時,應該要加以提醒使用者,以免離開後輸入的資料都不見了,畢竟在裝置上面打字不是一件舒服的事情的.. 那麼應該要怎麼去處理這個動作呢?程式碼的部分也很簡單,首先是掛載事件的處理 this.BackKeyPress += new EventHandler (SecondPag_BackKeyPress); 之後做相關的處理就可以了,比如說下面這個樣子 void SecondPag_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) { if (!boltmp) { boltmp = true; e.Cancel = true; this.PageTitle.Text = "BackKey canceled"; } } 其中e.Cancel=True這行就是取消返回的動作了,是不是很簡單呢? 另外在頁面轉換的過程中,他是以環狀的方式在進行,也就是說當你用Navigate的方式去尋覽至一個頁面時,這個頁面就會被加入堆疊中,而按下back就會回到堆疊中記錄的上一個頁面,如果你的App使用情境跟這個方式有所牴觸的話,下面這邊有一篇很棒的文章可以參考喔,把Sample下載回來跑一下,就可以知道他是在做什麼的了 Solving Circular Navigation in Windows Phone Silverlight Applications

Tilt Effect for Windows Phone

在MSDN上的範例中, 可以找到Tilt Effect的範例 ;不過這個Tile Effect是幹啥用的呢? Tile Effect是可以幫你的控制項(元素)套用上像是在首頁中的Tile或是程式列表按下去時候的感覺,會有凹下去的樣子,有了這個效果會比較明顯的看出跟使用者間是比較有互動的,那麼要怎麼使用呢?使用的時候您可以先從MSDN上下載範例程式碼,其中就會包含了TiltEffect.cs這個類別檔案,之後將這個檔案加入到你的專案中,之後在XAML的部分設定一下,就會自動套用了喔;設定的方式大致像是下面這樣 要先加入xmlns xmlns : local ="clr-namespace:ControlTiltEffect" 之後,要設定成啟用 l local : TiltEffect.IsTiltEnabled ="True" 是不是很簡單呢,趕緊動手來試試看吧。下面我把PhoneApplicationPage相關的設定整個貼上來,一起參考應該會比較清楚一些 < phone : PhoneApplicationPage     x : Class ="RssReader.MainPage"     xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns : x ="http://schemas.microsoft.com/winfx/2006/xaml"     xmlns : phone ="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"     xmlns : shell ="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"     xmlns : controls ="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls" ...

Windows Phone Developer Tools January Update

圖片
各位鄉親啊,Windows Phone 7的開發工具有更新了喔,趕緊前往下載安裝;您可以參考一下下面這篇文章 Windows Phone Developer Tools January Update 其中也有下載的連結位置;這次的更新除了修正一些問題之外,也為了即將推出的Windows Phone 7 ROM更新,在模擬器上加入了『複製以及貼上』的功能,可以搶先體驗一下;複製貼上的動作是當你在文字框中選擇一個文字時(單擊文字),就會出現像是下圖的複製按鈕 這個時候可以擴大你的選取範圍(點住文字之後向左或是右拖曳),或是點選複製的按鈕;而點了複製的按鈕之後,在輸入鍵盤的上方就會出現貼上的按鈕,像是下圖 以這樣的方式來達到複製跟貼上的功能;而大致上來說,在這次的ROM更新,我們的應用程式不用做什麼修改就可以直接套用上去,而在上面文章連結中也有提到, 當你的應用程式中有使用到Pivot或是Panorama的時候要特別注意,在Pivot或是Panorama中不要擺放TextBox ,因為在使用複製或是貼上的功能時,會有拖曳的動作,而這個動作在Pivot或是Panorama中會有誤動作產生,也就是跟原本的頁面拖曳的行為有衝突了,這個要特別的留意一下喔。

OpenNETCF.Desktop.Communication在x64電腦上出現"數學運算導致溢位"或是"找不到檔案"的錯誤訊息

圖片
當有需要將Windows Mobile的裝置中的資料給抓回來電腦的時候,通常第一個想到的就是利用RAPI或是利用OpenNetCF提供的Communication類別來做,而當使用OnenNetCF提供的類別來做的時候,在x64的電腦上,你會發現在呼叫方法的時候,常常會莫名其妙的出現『數學運算導致溢位』或是『找不到遠端檔案』的錯誤訊息,真的是名奇妙,明明沒有做運算,天外飛來這筆還真是令人找不到頭緒。 經過搜尋相關資料以及經過一些測試之後,終於找到了元凶,相信您從標題中已經看出了端倪,為什麼強調x64?是的,OpenNetCF在x64的環境中直接使用會出現問題,這個跟Access的OleDB在x64中的問題極其類似,解決的方式就是要修改一下編譯的設定,將Any CPU變更為x86 經過設定之後就可以順利運作了 YAYAYA~ 如果您需要Desktop.Communcation的使用說明,這邊有一篇很棒的文章不要錯過了喔 [推薦工具]OpenNETCF.Desktop.Communication Library

ShellTileSchedule;定時更換應用程式在Tile的背景圖片

在WP7中,當應用程式安裝完成之後就會出現在應用程式的列表當中,而在應用程式上長按之後,就會出現Pin to start的功能;這個功能是能夠讓你將你的應用程式顯示在首頁的Tile畫面上;而應用程式放到Start畫面上之後,最會最常被使用者看到、點選的,那麼我們就會希望幫在Start畫面上的應用程式上加上一些訊息,很常見的例如說Email的應用程式會顯示有幾封新的郵件這樣;而除了使用文字的方式來顯示訊息之外,也可以變更背景的圖片,來讓使用者有不一樣的感覺,例如說一個顯示目前天氣狀況的應用程式,用鮮明的圖片來做顯示就會比裡用單純使用文字說明來的更好。那麼,該怎麼變更應用程式的背景圖片呢? 更新應用程式的背景圖片可以使用Push Notification來做,Push Notification能夠做到滿多事情的,而如果說不想要使用Push Notification呢?今天要跟各位介紹的就是另一種方式,利用ShellTileSchedule來做;ShellTileSchedule能夠定時的連到你指定的位置去下載圖片,下載完成之後,就會變成應用程式的背景圖片了。在開始之前,應用程式使用的圖片有一定的規格,建議您依照對應的規格來做圖片的處理,您可以參考在MSDN的這篇介紹 Windows Phone 7 應用程式圖示製作指南 ,上有有相當詳盡的說明喔。 接下來來看看程式的部分,使用ShellTileSchedule的程式碼相當的簡單,例如下面的樣子 sts.Recurrence = Microsoft.Phone.Shell.UpdateRecurrence.Interval; sts.Interval = Microsoft.Phone.Shell.UpdateInterval.EveryHour; sts.StartTime = DateTime.Now; sts.RemoteImageUri = new Uri(@"http://bauann.myweb.hinet.net/test01.png"); sts.Start(); 像是上面的程式碼便會在每個小時到筆者放圖片的位置去下載圖片,並且設定為應用程式的背景圖片;接來來來看看一些屬性的用途是做...

在WP7的TextBox如果需要Click事件該怎麼做呢?

已經忘了在哪邊看到相關的文章了,不過還是筆記一下;在預設TextBox上面只會有MouseLeftButtonDown這個事件可以偵測使用者是否點選,而這個事件是一點選就馬上會觸發了,如果想要Click的效果,也就是按下、放開,這樣的動作才要觸發的話,就要而外的處理一下;這類的需求是比較少見一些,不過如果需要在TextBox上實作Click的動作的話可以參考下面的方式。 首先建立一個新的類別,在這個類別中會繼承原先的TextBox,並且加上一個自訂事件 namespace MyCtl { public class nTextBlock : TextBox { bool isMouseDown = false; public delegate void deOnClick(object sender,MouseButtonEventArgs e); public event deOnClick OnClick; protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { isMouseDown = true; base.OnMouseLeftButtonDown(e); } protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e) { if (isMouseDown) { isMouseDown = false; OnClick(this,e); } else base.OnMouseLeftButtonUp(e); } } } 而在主要頁面上可以用下面的方式將控制項加進來使用 MyCtl.nTextBlock nTxt = new MyCtl.nTextBlock(); ...