2011-03-30 39 views
22

我在ResourceDictionary中設置了一個SolidColorBrush和LinearGradientBrush資源的加載。我使用這些,因爲我正在重新編制幾個控件以供我們的應用程序使用。如何將另一個資源(SolidColorBrush)指向另一個

現在我有一堆其他外部筆刷,我必須使用它們來改變我們的應用程序。這些也設置在ReseourceDictionary中。

是否可以將筆刷資源指向另一個字典中的新資源,類似於Styles的「BasedOn」屬性?

這樣的事情,在概念上,至少:

<SolidColorBrush x:Key="MyDataGridHeaderBrush" Binding="HeaderBrushDefinedElsewhere"/> 

...或者是這種不可能的事情,在這種情況下,我必須去簡單地做一個查找/替換和替換我的畫筆名與新的畫筆名稱?

由於提前,

AT

回答

29

我同意雷切爾說,但如果你有它的基礎上現有的SolidColorBrush,你可以做到以下幾點:

<SolidColorBrush x:Key="MyDataGridHeaderBrush" 
       Color="{Binding Source={StaticResource HeaderBrushDefinedElsewhere}, Path=Color"/> 

注意這只是工程的「顏色」屬性,你必須爲您需要的每個屬性單獨執行。

+0

太棒了!現在我真的可以開始像我想要的級聯。 – 2013-04-19 12:49:29

+2

完美,這是我一直在尋找的謝謝。我可能會指出你錯過了大括號;-) – user2109254 2016-02-13 02:56:17

8

通常我做一個靜態顏色屬性在一個地方,就有我刷綁定到該顏色。

<SolidColorBrush x:Key="LightColor" Color="#C5DBF6"/> 
<SolidColorBrush x:Key="DarkColor" Color="#FF8DB2E3"/> 

<LinearGradientBrush x:Key="FadeOutRight" EndPoint="1,1" StartPoint="0,0"> 
     <GradientStop Color="{Binding Source={StaticResource LightColor}, Path=Color}" Offset="0" /> 
     <GradientStop Color="{Binding Source={StaticResource DarkColor}, Path=Color}" Offset="1"/> 
</LinearGradientBrush> 

您還可以綁定其他SolidBrushColors這樣:

<SolidColorBrush Color="{Binding Source={StaticResource LightColor}, Path=Color}" /> 

如果這是在另一個文件中引用,它可能會強調它,因爲它找不到靜態資源,但在運行時它會仍然編譯提供包含您的畫筆定義的主資源文件被加載。

+1

自2011年以來是否更改過此功能?我得到一個錯誤「System.Windows.Media.SolidColorBrush類型的對象不能應用於需要類型System.Windows.Media.Color的屬性」,它與上面的示例完全相同(即漸變停止) 。 – Grim 2016-03-03 23:08:24

+0

@Grim如果你用你正在使用的XAML創建一個單獨的問題,可能是最好的。我不認爲有任何改變,但我可能是錯的。 – Rachel 2016-03-04 15:07:01

+0

是的,它似乎沒有工作,不幸的是分配一個solidColorBrush顏色屬性。至少設計師抱怨並拒絕在更改參考顏色時更新顏色。 – David 2017-06-06 17:59:54

相關問題