2

我創建了一個Xamarin Forms應用程序。 並在標籤名爲「MyLabel」的新頁面內。 在後面的代碼爲我的網頁我有 有條件編譯似乎不適用於Xamarin Studio

private void SetUpUI() 
{ 
    #if __IOS__ 
    this.MyLabel.BackgroundColor = Color.Navy; 
    #endif 
} 

在我的iOS項目的選擇,我可以在「編譯器」選項卡中看到符號__IOS__。 (請見截圖)

enter image description here

當我在iOS上運行它不會使標籤藍色:

但如果我刪除#if __IOS__塊它使標籤藍色:

所以它似乎有條件編譯 不管用。 我在Mac上。所以無法在Visual Studio上測試。 長時間滯留,但無法弄清楚我錯過了什麼。

回答

2

您正在使用您的PCL項目其中將不包含這些編譯器的條件語句定義,因此,爲什麼你的條件代碼是變灰出來。

在你的PCL的項目,您可以使用Device.OnPlatform執行基於平臺的處理:

Device.OnPlatform (iOS:() => this.MyLabel.BackgroundColor = Color.Navy;); 

重:https://developer.xamarin.com/api/member/Xamarin.Forms.Device.OnPlatform/

+0

如果您在** v2.3.4之前使用Xamarin Forms版本**,這是要走的路。否則,按照我在答案中所述的方式使用'Device.RuntimePlatform'。 –

2

SushiHangover的答案是正確的:你的PCL項目不會有編譯器平臺的定義。

但是,他提供的解決方案已經過時了,因爲Xamarin Forms 2.3.4發佈了。 Device.OnPlatform已重新設計,如this discussion中所述,並在this Pull Request中實施。

在Xamarin Forms 2.3.4及更高版本中正確執行此操作的方法是使用Device.RuntimePlatform。使用一個開關或條件,以滿足像這樣你的需求:

if(Device.RuntimePlatform == Device.iOS) 
{ 
    // iOS 
} 
else if(Device.RuntimePlatform == Device.Android) 
{ 
    // Android 
} 

這將有可能做到這一點就像你問,如果你使用一個共享的項目而不是PCL的。因爲當您使用共享項目時,您可以訪問平臺項目的編譯器指令。

相關問題