2010-01-24 63 views
1

我修改WPF Calendar控件的控件模板來改變文字的顏色和控制的上一頁下一頁箭頭。我想將顏色設置爲名爲MyTextBrush的本地SolidColorBrush資源。WPF:將指定的顏色設置爲資源?

的上一頁和下一頁按鈕具有單獨的控制模板,並且每個吸取用於其按鈕的箭頭a Path對象。下面是上一頁按鈕相關的標記:

<Path Margin="14,-6,0,0" Height="10" Width="6" VerticalAlignment="Center" HorizontalAlignment="Left" Stretch="Fill" Data="M288.75,232.25 L288.75,240.625 L283,236.625 z"> 
    <Path.Fill> 
     <SolidColorBrush x:Name="TextColor" Color="#FF333333" /> 
    </Path.Fill> 
</Path> 

注意顏色命名TextColor,使用x:Name財產。

這裏是我的問題:需要x:Name屬性 - 如果它缺少WPF拋出異常。這意味着我不能簡單地給MyTextBrush資源的引用更換整個刷,因爲我將失去x:Name值。所以,我怎麼引用MyTextBrush,同時仍保留了x:Name屬性爲刷在這個特殊的控制模板?

感謝您的幫助。

+0

爲什麼WPF在刷子上需要一個x:Name?名稱通常不是必需的:您是從觸發器或動畫還是代碼隱藏引用它?如果可以的話,你能說出什麼是什麼以及你想用刷子做什麼? – itowlson 2010-01-24 23:02:24

+0

它確實讓我感到吃驚。 WPF日曆控件(WPF工具包,2009年6月)有點破解。日曆文本顏色是硬編碼在三個不同的控制模板中,通常在控制模板中完成的一些事情是在代碼中完成的,等等。隨着代碼的味道,它真的很臭。 – 2010-01-25 00:15:25

+0

我認爲他們這樣做的原因是你不能在資源字典中輕鬆地製作某些東西,因此他們不得不烘焙「TextColor」 – Schneider 2010-01-25 02:48:02

回答

1

所以,我怎麼引用MyTextBrush, 同時仍保留了X:名稱 屬性爲刷這個 特別是控制模板?

關於這個問題,聽起來像你使用了一個狡猾的/脆弱的模板。它是什麼控制模板?

  • 如果您完全控制了模板的源代碼管理,請刪除對指定元素的引用(最有可能在故事板中)。他們必須爲某種原因製作動畫。
  • 另一種選擇可能是剛剛創建的模板中的未使用的刷(也許在隱藏的元素)使用正確的名稱,以保持模板快樂。
  • 最後,您可以嘗試添加x:Name onto the brush in the shared RD,但是這是一個相當複雜,不知道它的價值吧!

另外兩個可能的解決方案:

  • 嘗試結合只是SCB的顏色屬性...應作爲其工作的一個DP
  • 更改模板動畫,使他們不使用命名刷,而是使用一個命名的父母,然後通過TargetProperty訪問畫筆,例如Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="myNamedParent"
+0

Dodgy並沒有開始描述它。這是WPF日曆控件的控件模板,它是一個混亂。它需要進行大手術才能將日曆文本顏色綁定到控件的Foreground屬性。 – 2010-01-25 00:55:26

+0

您是否希望保留日曆文字顏色動畫?如果不是簡單地撕開故事板 – Schneider 2010-01-25 02:44:28

0

最好的解決辦法似乎是打破Color地產出它自己的代碼,並使用該資源引用。下面是它的樣子:

<!-- FS: Changed template brush color --> 
<SolidColorBrush x:Name="TextColor"> 
    <SolidColorBrush.Color> 
     <StaticResource ResourceKey="FsTextColor" /> 
    </SolidColorBrush.Color> 
</SolidColorBrush> 
相關問題