2010-01-25 72 views
4

我有一個奇怪的問題讓我難住。我正在修改WPF日曆控件模板,出於我在下面解釋的原因,我必須使用Color資源,而不是SolidColorBrush資源,用於我的文本顏色。現在,我的Color資源是這樣的:綁定一個顏色資源?

<!-- My Colors --> 
<Color x:Key="MyTextColor">Blue</Color> 

現在我想的Color資源父屬性綁定,但Color對象不具有Binding財產。那麼,我將如何去約束這個資源呢?謝謝你的幫助。的WPF Calendar控件動畫在幾個地方其鼠標懸停文本,每個動畫使用了名爲SolidColorBrush


爲什麼我必須用一個顏色資源注意。我不能用資源引用替換畫筆,因爲我想保留動畫,這意味着我必須保留這個名字。但是,我可以代替畫筆的顏色,正如我在刷命名TEXTCOLOR做:

<!-- Modification: Changed template brush color --> 
<SolidColorBrush x:Name="TextColor"> 
    <SolidColorBrush.Color> 
     <StaticResource ResourceKey="MyTextColor" /> 
    </SolidColorBrush.Color> 
</SolidColorBrush> 

回答

0

我們在軟件有同樣的問題,這種解決方案上來。基本上你創建了一個類來實現對WPF的靜態資源類的擴展,該類處理綁定,然後在你的XAML代碼中使用它。很容易使用。

+0

鏈接的文章已死,也許你可以更新? – Kev 2012-02-05 19:38:28

5

我選擇了smoura的答案作爲正確的答案,因爲它確實回答了我問過的問題。但是,我想我可能會問錯誤的問題,這是解決問題的更好辦法。

我決定離開使用資源,然後嘗試綁定該資源。更好的方法是直接綁定Color屬性。爲此,我創建了一個名爲BrushToColorConverter的簡單IValueConverter,然後使用它將指定畫筆的顏色綁定到我創建的UserControlForeground屬性。該標記看起來是這樣的:

<!-- Modification: Changed template brush color --> 
<SolidColorBrush x:Name="TextColor" Color="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Converter={StaticResource BrushToColorConverter}}" /> 

這種方法完全消除了我以前使用的Color資源。這更簡單,我懷疑它更有效率。