Xamarin.Forms XAML Intellisense Visual Studio

在Xamarin.Forms的開發時,如何在編輯Xaml的時候有Intellisense可以使用呢?

James Tsai 2016/07/30 17:14:13
1717

主題

Xamarin.Forms開發時,如何在編輯Xaml的時候有Intellisense可以使用呢?

文章簡介

採用Xamarin.Forms開發App可以讓UI有關的跟編輯與設計時只要花一次的工,就可以完成多個平台的App介面設計。可是令人困擾的是在編輯Xamarin.FormsXaml時卻沒有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時,為啥不能像編輯WPFXAML一樣,有Intellisense的出現呢?這大概是使用Xamarin.FormsXAML時大家共有的心聲?!



大約在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.FormsXAML時沒能有XAML的處理而變成了XML

若如下圖,在Xamarin.FormsXaml檔用右鍵選單,選擇開啟方式,就會看到當我們直接點兩下開啟此XamlVisual Studio會如何開啟這個檔案。



但這也是非戰之罪,畢竟當時對2015Q3那時候的微軟來說Xamarin只是個小小的合作廠商(以公司的市值相比)所以對Visual Studio來說要編輯Xaml時應該是在開發WPFUWP等這類應用程式才是,而那只要有人編輯XamlVisual Studio的自動編輯器選擇就會去選擇編輯XAML的編輯工具去(紅色框)微軟何罪之有?



所以問題又回到Xamarin的頭上了,該怎麼解決是好?所以後來在2015/12初的時候,就在Visual Studio的元件庫中心又是出了一個免費的解決工具 Enable XAML Language for Xamarin.Forms,就是讓Xamarin.Forms的使用者在開啟Xaml的時候,以及在開發WPF or UWPXaml時,都可以跑到正確的編輯工具去。

網址如下:
https://visualstudiogallery.msdn.microsoft.com/8195a8e2-a842-4389-a8cb-34e4672e2e13



但很遺憾後來又經過改版以及Visual Studio 2015 Update 2的更新推出後,安裝上述的那套工具對Xamarin.Forms編輯Xaml檔時仍是沒有幫助的。

正式的解決辦法還是等微軟推出新版的更新吧

不過如果對XAML基本概念了解的人,其實就知道雖然XAML是建立在XML規範基礎之上的一種標記式語言,但卻要取得XAML的標記服務而非XML標記服務,但是因為Xamarin.FormsXAML上面有一行:



而被認定了應取得XML的標記服務。

所以把該行就可以解決問題?似乎也不是這樣,推測背後還牽扯到一些Visual Studo判定應開啟的編輯器跟Library轉換的問題,沒有再去深究原因了


解決方案


目前的解決的方式是將開啟Xamarin.FormsXaml時在右鍵選單上用開啟方式,接著選擇原始程式碼(文字)編輯器後確定



注意到第一列的<?xml version=”1.0” encoding=”utf-8 ?>,會變成純藍色的呈現。(如果沒有,請重開Visual Studio再做上述動作)



這時候可以在下面的編輯區域試著編輯看看



甚至之前不支援協助事件註冊的Intellisense都已經能支援直接產生出事件的Intellisense並且也會在對應的C#類別產生出C#的事件處理常式的程式碼





如果所用到的屬性值會是個enum,也是有對應的Intellisense的。



XAML應有的Intellisense表現上該有的都有了,就只差開啟的方式必須要特別選而如果常常開發Xamarin.Forms的話,那就可以直接在開啟Xamarin.FormsXaml檔案在右鍵選單上開啟方式,接著選擇原始程式碼(文字)編輯器後,多按一下設為預設值(下圖藍色框)後,按確定這樣以後開啟Xaml檔案時就會預設用此編輯器開啟了。但注意若以後要去開WPF or UWPXaml檔案時,就要另外特別選擇了。



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


James Tsai