2013-03-08 54 views
4

我有一個用戶控件UserControl1,它定義資源中的樣式。該用戶控件包含UserControl2的一個實例,它引用該樣式:將資源從一個UserControl解析到父UserControl

<UserControl x:Class="UserControl1"> 
    <UserControl.Resources> 
     <Style x:Key="MyStyle" /> 
    </UserControl.Resources> 

    <Grid> 
     <UserControl2 /> 
    </Grid> 
</UserControl> 

<UserControl x:Class="UserControl2"> 
    <Grid Style="{StaticResource MyStyle}"> 
    </Grid> 
</UserControl> 

然而,UserControl2找不到樣式資源,即使它是在邏輯樹(的UserControl1的資源範圍內)。如何讓UserControl2在UserControl1中查找資源?

+0

是否有一個特定的原因,風格坐在UserControl內而不是在ResourceDictionary中? – Blachshma 2013-03-08 17:22:25

+0

它實際上在resourcedictionary中,但我將它包含在UserControl1的MergeDictionaries中。這是因爲它包含了一些我只想應用於UserControl1的主題式樣式,並且所有的東西都懸於它之上。 – thecoop 2013-03-08 17:24:55

+0

那麼如何在UserControl2中公開一個新的依賴屬性,它允許你從外部設置模板? – Blachshma 2013-03-08 17:34:27

回答

1

你可以這樣做,但我建議使用ResourceDictionary來代替。

無論如何,如果你想這樣做,這樣你可以使用FindAncestor尋父並訪問要離開父母ResourceDictionary

<UserControl x:Class="UserControl1"> 
    <UserControl.Resources> 
     <Style x:Key="MyStyle" /> 
    </UserControl.Resources> 

    <Grid> 
     <UserControl2 /> 
    </Grid> 
</UserControl> 

<UserControl x:Class="UserControl2"> 
    <Grid Style="{Binding Resources[MyStyle], RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:UserControl1}}}"> 
    </Grid> 
</UserControl> 

東陽ResourceResource是可以訪問使用字典key就像在後面

1

代碼我有同樣的問題,並能夠通過引用的資源來解決它通過DynamicResource而不是StaticResource

<UserControl x:Class="UserControl2"> 
    <Grid Style="{DynamicResource MyStyle}"> 
    </Grid> 
</UserControl> 

編譯器仍然會提示資源無法解析。

相關問題