2013-07-19 44 views
0

我的問題是幾乎相同,這一個:在XAML如何將資源複製到不同的標籤名稱動態

How to assign WPF resources to other resource tags

除了這個問題僅適用於靜態資源。我想知道如何用動態資源做到這一點。詳細:

我使用資源作爲'類變量'來控制對象的顏色。所以我有這樣的:

<Style x:Key="CustomScrollBarStyle" TargetType="{x:Key ScrollBar}"> 
    <Style.Resources> 
     <SolidColorBrush x:Key="HighlightColor" Color="Blue"/> 
    </Style.Resources> 
    <Setter Property="Template".../> 
</Style> 

,我還可以自定義顏色,每當我使用滾動條:

<ScrollBar> 
    <ScrollBar.Resources> 
     <SolidColorBrush x:Key="HighlightColor" Color="Yellow">/ 
    </ScrollBar.Resources> 
</ScrollBar> 

這個作品真的很好,我提供參考始終與HighlightColor {DynamicResource}。但我不知道如何把它提高一個等級。例如,我有一個組合框,也有它自己的顏色風格。我想用這個顏色的滾動條也:

<Style x:Key="ComboBoxStyle1" TargetType="{x:Type ComboBox}"> 
    <Style.Resources> 
     <SolidColorBrush x:Key="ComboBoxColor" Color="Black"/> 
    </Style.Resources> 
    ... 
    <ControlTemplate> 
     <ScrollBar> 
      <SolidColorBrush x:Key="HighlightColor" ???? use ComboBoxColor/> 
     </ScrollBar> 
    </ControlTemplate> 
    ... 
</Style> 

我使用綁定嘗試,但它給出了一個例外,一個綁定源不能是DynamicResource。如果我作爲StaticResource綁定到顏色,它只使用默認顏色。我也嘗試過直接創建一個DynamicResource,但它抱怨只適用於依賴項屬性,不能直接插入到資源字典中。

那麼我怎樣才能從現有的動態創建一個新的資源?

謝謝。

更新 看起來沒有辦法做到這一點。所以我決定只使用附加的屬性。他們完美地工作。

回答

1

將資源添加到您的首頁Page.Resource(或Control.Resource)。然後,使用StaticResource訪問它。

<Page.Resources> 
    <SolidColorBrush x:Key="HighlightColor" Color="Yellow">/ 
</Page.Resources> 

<TextBlock Foreground="{StaticResource HighlightColor}"/> 
+0

這不起作用。我想滾動條顏色繼承組合框顏色。因此,任何在其他地方使用組合框的人都可以覆蓋顏色,並且會自動顯示在滾動條中。只適用於那些滾動條。其他人將使用他們被覆蓋的任何顏色。 – philq

+0

啊,那麼你需要的是創建一個ViewModel來存儲你的顏色。然後,您可以使用任何顏色(包括運行時)覆蓋它,然後使用綁定檢索它。 –

+0

我知道這樣做,但如果有一種方法可以在純XAML中執行此操作,那將非常有用。如果只有您可以覆蓋它們,那麼資源可以像局部變量一樣工作。 – philq

3

你爲什麼不創建一個顏色資源這樣

<Color x:Key="KeyName">#112233</Color> 

,並將其設置爲你的畫筆值。

在您提供的代碼中,您嘗試使用SolidColorBrush值設置顏色屬性類型。

+0

這就是我所做的,但它僅適用於Color和Brush的本質。我真的很想知道是否有一種方法可以做到這一點 - 將資源用作繼承的屬性,因此您不必子類化任何東西。 – philq

+0

據我所知,Style(BasedOn屬性)可以繼承,但不能和Brushes一起使用。 – Nitesh

相關問題