發表文章

目前顯示的是有「wp7」標籤的文章

你知道WP7的模擬器也有中文輸入嗎?

圖片
這篇我應該是Lag很大,不過由於有實機可以測試就一直沒去看模擬器的設定 XD 今天看了一下,模擬器中也有中文輸入的設定可以使用,下面就直接用幾張圖來看吧~ 簡短的分享一下我 Lag很大的資訊 Orz

自訂ValueConverter (值轉換器)

圖片
在Silverlight中,Binding(資料繫結)是一個很強大而且方便的功能;利用Binging可以將元素的屬性跟其他的元素屬性作綁定,或是綁定到我們自訂定義的類別。詳細的下次再來談,這次先來看看ValueConverter;轉換器所扮演的角色是做為一個中介,例如說我們想要將一個Checkbox的Visibility綁定到自訂的類別屬性上面去,那麼應該要怎麼做呢?下面就來看看這個部分 假設現在有一個類別叫做clsImageItem,裡面定義了一些屬性,例如 public uint ImageWidth { get; set; } public uint ImageHeight { get; set; } public int ImageIndex { get; set; } public bool IsEditMode { get { return _IsEditMode; } set { _IsEditMode = value; NotifyPropertyChanged("IsEditMode"); } } 而在介面的設計上,放了一個StackPanel,StackPnael中放置了一個CheckBox以及Image;希望達成的效果是在一般的情形下,CheckBox是不可見的,而進入『編輯模式』的時候,就將CheckBox給顯示出來,介面的XAML大概會像是這樣 < StackPanel  Orientation = "Horizontal"  d : DesignWidth = "290" > < CheckBox  x : Name = "chkMark"  VerticalAlignment = "Top"  Width = "55" Visibility ...

Windows Phone 7 - Mango

相信有wp7的朋友都在一直期待mango的更新快點推出,不過看起來還需要一段時間 Orz ,目前官方是說秋天... 不過一些新更能與細節倒是可以先體驗一下,來看看介紹的影片過過乾癮吧

在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中會有誤動作產生,也就是跟原本的頁面拖曳的行為有衝突了,這個要特別的留意一下喔。

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(); ...

在WP7 Silverlight應用程式中,要怎麼去偵測目前的主題是黑色或是白色的呢?

最近在自個瞎搞一個簡單的Rss Reader,從網路上把資料抓下來之後,在RSS的資料中,本身會帶有文章的摘要,而這個摘要的部分基本上就是HTML了,想了一些解析方式,最後根據科技始終來自於人性的最高指導原則,顯示的部分就直接餵給webbrowser來顯示了 XDD(我真是懶阿);而在實作的過程中,由於預設WP7是黑色的背景,直接叫webbrowser出來之後會白白一片,說實在挺難看的,所以就偷偷的在HTML裡面加上背景跟文字的顏色,讓顯示出來的背景變成黑的,不過問題來了;在WP7中,白色與黑色的主題是隨時都都可變更的,所以也不能固定一種顏色,那麼就必須要知道目前的主題顏色了,後來在 論壇中看到這篇文章 ,裡面有相當棒的解答,大家可以參考看看,這邊也略為做個筆記,可以利用下面的方式來偵測 //ref:http://forums.create.msdn.com/forums/p/64067/392241.aspx#392241 private bool IsLightTheme() { var visibility = (Visibility)Application.Current.Resources["PhoneLightThemeVisibility"]; return (visibility == Visibility.Visible) ? true : false; } 範例的效果可以參考下面影片

Windows Phone 7推廣用的下載按鈕圖片

圖片
今天看到Nick的Blog上面寫到 Promoting your Windows Phone 7 application 這篇文章,看了一下,原來Microsoft現在有提供Windows Phone 7 應用程式用的下載圖形,比如說下面顯示的這幾個 這些圖形可以讓您連到您的應用程式去,大家可以參考看看;而怎麼去做連結的部分呢?您可以參考MSDN上面的這篇說明(Nick的Blog上也有提到) How to: Link to Windows Phone Marketplace Content

Capability Detection Tool

圖片
在筆者先前的文章 Silverlight for Windows Phone 7:Hello Windows Phone 7 中,有提到WMAppmanifest.xml這個檔案的用途;其中Capabilities的標籤中,就是設定了應用程式會使用到那些功能,而針對這個部分,MSDN網站中也發布了一個新的工具可以來幫助開發者偵測你的應用程式中用到了那些用途,MSDN的說明可以參考 這邊 ,下面筆者簡單說明一下使用的方式。 要使用這個工具,必須要安裝 Windows Phone Developer Tools October 2010 Update 安裝完畢之後就會多了Windows Phone Capability Detection tool可以使用,這個工具是一個命令列的工具,位置在 x64: %ProgramFiles (x86)%\Microsoft SDKs\Windows Phone\v7.0\Tools\CapDetect x86: %ProgramFiles%\Microsoft SDKs\Windows Phone\v7.0\Tools\CapDetect 而使用的方式是開啟命令提示字元,切換到工具的目錄(上述的資料夾位置),輸入以下的命令 CapabilityDetection.exe Rules.xml [您的專案輸出資料夾] 專案資料夾是指定到"資料夾"就可以了,不用指定到xap檔案喔,而執行之後,在命令提示字元的視窗中就會出現檢測的結果,例如下圖這樣 依照這個結果就可以去修改您的WMAppmanifest.xml的檔案內容了。 而這麼做有什麼用處呢?全部都加進去不是最保險?筆者猜想這部分或許將來在應用程式執行時,依據設定檔不同會出現不同的訊息告知使用者,並請使用者確認之後才允許執行;而這個時候明確的告訴使用者應用程式將執行到那些功能會是比較好的方式。 另外,在MSDN中最下面有提到 In some circumstances, you may receive the ID_CAP_NETWORKING capability from the tool even if your application does not use networking. An example would be if you...

Gif in Windows phone 7

圖片
今天突然想到,在以往WM5/WM6系列,在系統上是無法正常的顯示Gif圖形的,那Windows Phone 7呢?簡單測試了一下,利用下面的XAML去測試 殘念,還是無法顯示;後來搜尋了一下,幸好有好心的達人有做出相關的解決方案,在 論壇中的這篇 有提到一個方式,是使用CodePlex上的這個解決方案, .NET Image Tools ,就來測試一下吧,首先把組件下載回來之後,必須要加入相關的參考,我這邊只有用到Gif檔案,所以加入的參考是這些 之後再畫面上簡單的只放了一個按鈕,相關程式碼會像是下面這樣 using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using System.IO.IsolatedStorage; using System.Windows.Media.Imaging; using ImageTools.IO.Gif; using ImageTools.Controls; namespace RunDemo { public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { ImageTools.IO.Decoders.AddDecoder (); InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { ImageTools.Image img = new ImageTools.Image(); ...

ApplicationBar Demo (以XAML的方式建立)

圖片
在上一篇,有提到利用程式碼的方式來建立ApplicationBar,是不是感覺有點冗長呢?同樣的功能我們可以很輕易的用XAML Code來做到;其實在專案一建立的時候,預設就會將相關的程式碼加在XAML中,像是下圖的地方 這個時候就可以發現XAML的長處了,先來看看修改後XAML的部分 < Grid x : Name = " LayoutRoot " Background = " Transparent " > < Grid . RowDefinitions > < RowDefinition Height = " Auto " / > < RowDefinition Height = " * " / > < / Grid . RowDefinitions > < ! - - TitlePanel contains the name of the application and page title - - > < StackPanel x : Name = " TitlePanel " Grid . Row = " 0 " Margin = " 24,24,0,12 " > < TextBlock x : Name = " ApplicationTitle " Text = " ApplicationBar Demo " Style = " {StaticResource PhoneTextNormalStyle} " / > < TextBlock x : Name = " PageTitle " Text = " XAML " Margin = " -3,-8,0,0 " Style = " {St...

ApplicationBar Demo (以程式碼的方式建立)

Note:目前開發工具尚未RTM,此版本使用的開發工具為Beta版本,與RTM版本可能略有差異 在Windows Phone 7的環境中,在"功能表的部分也做了變更,現在除了傳統的文字功能表之外,也加入了ICON,而今天就來看看這個部分,主要是操作ApplicationBar與ApplicationBarIconButton,而建立的方式可以由XAML的介面建立,也可以純用程式碼來做,這一篇先來看看程式碼的部分 namespace ApplicationBarDemo { public partial class MainPage : PhoneApplicationPage { TextBox tbSelectedItem = null; Button btnShowAppBar = null; // Constructor public MainPage() { InitializeComponent(); this.ApplicationTitle.Text = "ApplicationBar Demo"; //set up content grid RowDefinition RowOne = new RowDefinition(); RowOne.Height = new GridLength(100, GridUnitType.Pixel); ContentGrid.RowDefinitions.Add(RowOne); RowDefinition RowTwo = new RowDefinition(); RowTwo.Height = new GridLength(100, GridUnitType.Pixel); ContentGrid.RowDefinitions.Add(RowTwo); RowDefinition RowThree = new RowDefinition(...

How to get rowindex / column of a grid control in silverlight?

圖片
這是在國外論壇上看到的一個問題,連結在 這邊 ,測試了一下之後,可以利用下面的方式來抓取;例如做了一個像是下圖的介面 項目的列表是放在Grid容器當中,XAML大致上像是這樣 在點選之後要去抓取被點選項目的相關Index,首先要去Handle Grid的滑鼠點選事件,例如 ContentGrid.MouseLeftButtonDown += new MouseButtonEventHandler(ContentGrid_MouseLeftButtonDown); 之後利用Grid.GetRow來達成,例如 void ContentGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { //throw new NotImplementedException(); int rowindex = Grid.GetRow((FrameworkElement)e.OriginalSource); }