2016-07-05 60 views
0

我的下一個XAML:StaticResourceExtension在Visual Studio中財產元件2015

<ContentPage ...> 
    <ContentPage.Resources> 
    <ResourceDictionary> 
     <Style x:Key="visualStyle" TargetType="VisualElement"> 
     <Setter Property="BackgroundColor" Value="Red" /> 
     </Style> 
     <Style x:Key="baseStyle" TargetType="View" BasedOn="{StaticResource visualStyle}"> 
     ... 
     </Style> 
     <Style x:Key="labelStyle" TargetType="Label" BasedOn="{StaticResource baseStyle}"> 
     <Setter Property="TextColor" Value="Black" /> 
     </Style>  
    </ResourceDictionary> 
    </ContentPage.Resources> 

    <ContentPage.Style> 
    <StaticResourceExtension Key="visualStyle" /> 
    </ContentPage.Style> 
... 
</ContentPage> 

當我嘗試設置樣式使用visualStyle StaticResourceExtension我獲得Visual Studio中的下一個annoing彈出整個ContentPage:

enter image description here

爲什麼會發生這種情況,以及如何刪除它? XAML是正確的,並且在運行時被成功解析。

+0

如果你只是使用'「,省略'Extension',它是否工作?你是否嘗試給'ContentPage'屬性'Style =「{StaticResource visualStyle}」'而不是將它作爲一個元素進行操作? –

+0

@EdPlunkett,不,它不。我得到'{DynamicResource}只能與依賴屬性'語法錯誤一起使用。 – Dmytro

+0

它給你StaticResource上的錯誤? –

回答

0

這是一個非常不尋常的語法使用。標記擴展幾乎總是使用鬍鬚括號語法來實例化,所以它並不讓我感到驚訝,因爲Intellisense正在變得困惑。

我明白你爲什麼要這樣做 - 你想引用在引用元素的資源中定義的資源。但是XAML希望能夠在遇到引用之前解析該資源。

有幾個選項...

  1. 您可以在visualStyle資源移動到的App.xaml,並使用正常的屬性加上小鬍子括號語法從頁面中引用它。
  2. 您可以通過DynamicResource來引用它,而應該允許它正確解析。但是這似乎有點蠻橫。

但是,我的首選解決方案是第一個解決方案,因爲這可能是應用程序範圍內的專題風格。

+0

我目前正在學習Xamarin形式,並從'Microsoft_Press_eBook_CreatingMobileAppswithXamarinForms_PDF'複製和粘貼此代碼。 {StaticResource visualStyle}語法給了我'不能分配屬性Style':類型不匹配「System.String」和「Xamarin.Forms.Style」運行時錯誤 – Dmytro

+0

我不是確定第三個選項是否可行(現在不能測試)。我將編輯回覆以將其刪除,以便其他讀者不嘗試。你有沒有嘗試其他兩個建議? –

0

我看到你的代碼的這部分,並想知道(因爲我太開始學習Xamarin)不能是StaticResourceExtension鍵屬性,必須使用後綴x:?

<ContentPage.Style> 
    <StaticResourceExtension x:Key="visualStyle" /> 
    <!-- INSTEAD OF <StaticResourceExtension Key="visualStyle" />--> 

</ContentPage.Style> 

我只是遇到了這個例外,發現問題是,我用的是屬性走錯路了,所以也許這例外是Xamarin的方式告訴我們,我們搞砸了的東西,沒有說明確的什麼。