2014-01-30 84 views
6

一個ContentControl中的內容屬性比方說,我有一個Windows商店應用(針對Windows 8.1),並在頁面上有一個ContentControl中,看起來像這樣:綁定在WinRT中

<ContentControl> 
    <ContentControl.Content> 
    <TextBlock>Hello world</TextBlock> 
    </ContentControl.Content> 
</ContentControl> 

這工作絕對沒問題,但如果我嘗試設置的內容作爲一種資源,就像這樣:

<Page.Resources> 
    <TextBlock x:Key="TestContent">Hello world</TextBlock> 
</Page.Resources> 
<ContentControl Content="{StaticResource TestContent}" /> 

一切都在設計看起來不錯,但我得到以下運行時錯誤:

無法分配財產 「Windows.UI.Xaml.Controls.ContentControl.Content」

我試圖定義在各個地方的資源(App.xaml中,單獨的資源文件等),但我每次都得到相同的錯誤。

所以,我有一些問題:

  1. 如果這是可能的WinRT的XAML?我只是在做一些愚蠢的事情嗎?
  2. 是否有另一種方式來資源這樣的任意內容,例如路徑數據? (我有一些有限的成功,爲Path元素定義了一個樣式,在一個setter中配置了路徑數據,但是在導航回頁面時似乎沒有重新綁定,但這是一個其他問題,儘管......)

回答

6

通常,資源是共享的「單個實例」,各種XAML元素指的是單個共享實例。我不確定爲什麼設計師暗示這會起作用(除了支持多種類型的「XAML」)。但是,在TextBlock的情況下,它有點不同,因爲您希望元素實例能夠被多次複製和實例化(例如,可能會承載多個ContentControl s)。

WPF有一個功能可以使這項工作在一個叫x:Shared的特殊屬性中。您將其設置爲false以指示Resource未共享,並且每個資源請求都應返回一個新實例。 WinRT沒有這個相同的功能。

然而,您可能會考慮一個完全支持的解決方法。

一種選擇是使用,而不是代替直接作爲您已經嘗試內容的模板:

<Page.Resources> 
    <Style x:Name="replacement" TargetType="ContentControl"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ContentControl"> 
        <TextBlock FontSize="100" Foreground="Red">Hello!</TextBlock> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Page.Resources> 
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <ContentControl Style="{StaticResource replacement}"></ContentControl> 
</Grid> 

在語法上,這是一個小病程較長,但在功能上,它應該是相同的結果。

沒有x:Shared,您僅限於能夠結合到屬於內部數據類型的資源,如x:string(如下作品爲例):

<Page.Resources> 
    <x:String x:Key="tbResource">The Text!</x:String> 
</Page.Resources> 
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" > 
    <ContentControl Content="{StaticResource tbResource}" ></ContentControl> 
</Grid> 
+0

賓果!優秀的解釋和替代解決方案 - 非常感謝。 –

0

我的假設是,你正在使用Visual Studio 2012年有在2012年其他類似的錯誤,是在Visual Studio 2013年您的代碼,這是完美的解決,在Visual Studio中正常工作2013年

enter image description here

祝你好運!

+0

感謝傑裏 - 不,對不起,我米VS 2013(我的目標是Windows 8.1,這需要它,我認爲) - 一切似乎在設計師工作正常,它只是在運行時我得到的錯誤 –

+0

它實際上是一個錯誤,設計師建議代碼會工作。如果你有興趣,我的答案有更多的細節。 – WiredPrairie