在Xamarin.Forms的開發時,如何在編輯Xaml的時候有Intellisense可以使用呢?
主題: |
在Xamarin.Forms的開發時,如何在編輯Xaml的時候有Intellisense可以使用呢? |
文章簡介: |
採用Xamarin.Forms開發App可以讓UI有關的跟編輯與設計時只要花一次的工,就可以完成多個平台的App介面設計。可是令人困擾的是在編輯Xamarin.Forms的Xaml時卻沒有Intellisense可以使用,讓開發的效率大打折扣。透過本篇文章的介紹,來讓Intellisense回歸吧~~ |
作者: |
James Tsai |
版本/產出日期: |
V1.0/2016.7.29 |
1. 前言
• 採用Xamarin.Forms開發App可以讓UI有關的跟編輯與設計時只要花一次的工,就可以完成多個平台的App介面設計。但是在編輯XAML時卻沒有Intellisense可以來協助我們實在讓人困擾,就讓本文章的介紹教你解決吧~
2. 環境準備
• Windows 8/8.1/10
• Visual Studio 2015
3. 本文
在Xamarin.Forms編輯XAML時沒有Intellisense的問題
• 在Xamarin.Forms編輯XAML時,為啥不能像編輯WPF的XAML一樣,有Intellisense的出現呢?這大概是使用Xamarin.Forms的XAML時大家共有的心聲吧?!
• 大約在2015年的11月有在TPU發表過” 讓在Xamarin.Forms中編輯Xaml的時候,沒有IntelliSense的問題改善…”這篇文章,後來因為Xamarin的改版以及Visual Studio 2015 Update 1更新以後,但這篇文章的處理方式無法解決Visual Studio 2015 Update 1以後所帶來的問題…
一切都是”假的”,選對編輯工具才是真的
• 由於Visual Studio 2015 Update 1更新發表後(當時是2015/11底),使得在原本Xamarin 4更新後的Xamarin.Forms,本能夠在編輯XAML時有Intellisense的使用,卻又變的不行了。但說真的也不是不行,而是Visual Studio 2015 Update 1以後,把Xamarin.Forms的處理XAML的編輯工具,自動選成了要處理XML的編輯工具,所以導致於編輯Xamarin.Forms的XAML時沒能有XAML的處理而變成了XML。
若如下圖,在Xamarin.Forms的Xaml檔用右鍵選單,選擇開啟方式,就會看到當我們直接點兩下開啟此Xaml檔,Visual Studio會如何開啟這個檔案。
• 但這也是非戰之罪,畢竟當時對2015年Q3那時候的微軟來說Xamarin只是個小小的合作廠商(以公司的市值相比),所以對Visual Studio來說要編輯Xaml檔時應該是在開發WPF、UWP等這類應用程式才是,而那只要有人想編輯Xaml檔,Visual Studio的自動編輯器選擇就會去選擇編輯XAML的編輯工具去(紅色框),微軟何罪之有?
• 所以問題又回到Xamarin的頭上了,該怎麼解決是好?所以後來在2015/12初的時候,就在Visual Studio的元件庫中心又是出了一個免費的解決工具” Enable XAML Language for Xamarin.Forms”,就是讓Xamarin.Forms的使用者在開啟Xaml檔的時候,以及在開發WPF or UWP的Xaml檔時,都可以跑到正確的編輯工具去。
網址如下:
https://visualstudiogallery.msdn.microsoft.com/8195a8e2-a842-4389-a8cb-34e4672e2e13
• 但很遺憾後來又經過改版以及Visual Studio 2015 Update 2的更新推出後,安裝上述的那套工具對Xamarin.Forms編輯Xaml檔時仍是沒有幫助的。
正式的解決辦法還是等微軟推出新版的更新吧…
不過如果對XAML基本概念了解的人,其實就知道雖然XAML是建立在XML規範基礎之上的一種標記式語言,但卻要取得XAML的標記服務而非XML標記服務,但是卻因為Xamarin.Forms的XAML上面有一行:
而被認定了應取得XML的標記服務。
• 所以把該行刪掉就可以解決問題?似乎也不是這樣,推測背後還牽扯到一些Visual Studo判定應開啟的編輯器跟Library轉換的問題,沒有再去深究原因了。
解決方案
• 目前的解決的方式是將開啟Xamarin.Forms的Xaml檔時在右鍵選單上用”開啟方式”,接著選擇”原始程式碼(文字)編輯器”後確定。
• 注意到第一列的<?xml version=”1.0” encoding=”utf-8” ?>,會變成純藍色的呈現。(如果沒有,請重開Visual Studio再做上述動作)
• 這時候可以在下面的編輯區域試著編輯看看。
• 甚至之前不支援協助事件註冊的Intellisense,也都已經能支援直接產生出事件的Intellisense並且也會在對應的C#類別產生出C#的事件處理常式的程式碼。
• 如果所用到的屬性值會是個enum,也是有對應的Intellisense的。
• 在XAML應有的Intellisense表現上該有的都有了,就只差開啟的方式必須要特別選過。而如果常常開發Xamarin.Forms的話,那就可以直接在開啟Xamarin.Forms的Xaml檔案時,在右鍵選單上用”開啟方式”,接著選擇”原始程式碼(文字)編輯器”後,多按一下”設為預設值”(下圖藍色框)後,再按確定,這樣以後開啟Xaml檔案時就會預設用此編輯器開啟了。但注意若以後要去開WPF or UWP的Xaml檔案時,就要另外特別選擇了。
4. 參考來源
• Enable XAML Language for Xamarin.Forms
https://visualstudiogallery.msdn.microsoft.com/8195a8e2-a842-4389-a8cb-34e4672e2e13
• Intellisense problem in Visual Studio
https://forums.xamarin.com/discussion/64005/intellisense-problem-in-visual-studio