2009-06-24 38 views
30

我在我的XAML中定義了許多元素,它們將Foreground =「#555」定義爲只讀文本框中褪色文本的顏色。如何在XAML中定義和使用變量來定義顏色?

<TextBlock Text="{Binding SingularModelClassFileTitle}" Margin="0 10 0 0"/> 
<TextBox Text="{Binding SingularModelClassFileName}" 
     HorizontalAlignment="Left" 
     IsReadOnly="True" 
     Foreground="#555" 
     Width="500"/> 
<TextBox 
VerticalScrollBarVisibility="Visible" 
AcceptsReturn="True"     
Width="500" 
Height="100" 
IsReadOnly="True" 
Foreground="#555" 
Text="{Binding SingularModelClassContent}" 
HorizontalAlignment="Left" 
Margin="0 0 0 20"/> 

我怎樣才能把這個值在XAML可變和參考的每個屬性,以便我只需要改變它在一個地方?

我想你可以做這樣的事情

<sys:String x:Key="ReadOnlyTextColor">#555</sys:String> 

... 

    <TextBox Foreground="{StaticResource ReadOnlyTextColor}"/> 

而且這將是該物業xmlns:sys=...參考?

+3

你問很好的問題,愛德華。在學習WPF時,你的名字一次又一次彈出;-) – 2011-04-04 21:09:01

回答

36

嘗試定義你的顏色作爲SolidColorBrush

<SolidColorBrush x:Key="ReadOnlyTextBrush" Color="#555555" /> 

...

<TextBox Foreground="{StaticResource ReadOnlyTextColor}" /> 
+0

Matt,原因`Color`不能直接用作`StaticResource`,因爲它是一個值類型,而不是引用類型? – 2014-01-25 17:19:12

40

有時你可能需要定義的顏色,而不是畫筆:(你想這個情況下是要能夠用顏色參數定義漸變) 在這種情況下,您可以像這樣定義它們:

<Color x:Key="ButtonColor1">Blue</Color> 
<Color x:Key="ButtonColor1">#AABBCC</Color> 
<Color x:Key="ButtonColor1" A="00" R="124" G="111" B="44"/> 
+2

不幸的是,最後一個選項會拋出「無法從文本'00'創建'System.Byte'。」在Windows Phone上。第二個像魅力一樣工作,歡呼! – 2012-08-16 10:07:21