2010-11-11 120 views
28

讓我有些XAML中這樣的:如何在Xaml值字段中設置自定義顏色值?

 <Trigger Property="ItemsControl.AlternationIndex" Value="2"> 
      <Setter Property="Background" Value="Red"></Setter> 
     </Trigger> 

如何設置顏色爲紅色,以類似250 200 150?我嘗試過Color 250 200 150和250 200 150,但不起作用。有任何想法嗎?

回答

38

使用HTML風格的顏色。

<Trigger Property="ItemsControl.AlternationIndex" Value="2"> 
     <Setter Property="Background" Value="#FF0000"></Setter> 
    </Trigger> 

或者,如果你想Alpha透明度:

<Trigger Property="ItemsControl.AlternationIndex" Value="2"> 
     <Setter Property="Background" Value="#80FF0000"></Setter> 
    </Trigger> 

或使用250200150您的示例顏色:

​​
+0

謝謝你,你知道我怎麼可以轉換顏色RGB到HTML輕鬆在VS?我的意思是我認爲在RGB和HSV中,但不是HTML:O – 2010-11-11 20:24:43

+1

當我說「HTML顏色」時,指的是指定符的格式,而不是色彩空間。格式爲'#RRGGBB'或'#AARRGGBB',其中R,G和B以十六進制表示,而不是十進制。 – 2010-11-11 20:28:32

+0

謝謝,這很好,但我不知道該怎麼做。就像我看到255 217 220時,我想到的是淺紅色,反之亦然,甚至在HSV中,我可以很快想象到我頭上的顏色。但在我腦海中做HEX,從來沒有做過,似乎我需要一個計算器,對吧? – 2010-11-11 20:31:04

14

對不起,我錯了這裏。使用這種方法就是用浮動範圍從0到1

<Trigger Property="ItemsControl.AlternationIndex" Value="2"> 
    <Setter Property="Background" Value="sc#1.0,0.7,1.0,0.5"></Setter> 
</Trigger> 

要使用ARGB值,我們必須利用這一點值,少一點直截了當

<Trigger Property="ItemsControl.AlternationIndex" Value="2"> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <SolidColorBrush> 
       <SolidColorBrush.Color> 
        <Color A="255" R="250" G="200" B="150"/> 
       </SolidColorBrush.Color> 
      </SolidColorBrush> 
     </Setter.Value> 
    </Setter> 
</Trigger> 

更新
你還可以使用自定義MarkupExtension

<Trigger Property="ItemsControl.AlternationIndex" Value="2"> 
    <Setter Property="Background" Value="{markup:BrushFromArgb 255, 250, 200, 150}"/> 
</Trigger> 

BrushFromArgbExtension

public class BrushFromArgbExtension : MarkupExtension 
{ 
    public BrushFromArgbExtension() { } 
    public BrushFromArgbExtension(byte a, byte r, byte g, byte b) 
    { 
     A = a; 
     R = r; 
     G = g; 
     B = b; 
    } 

    public byte A { get; set; } 
    public byte R { get; set; } 
    public byte G { get; set; } 
    public byte B { get; set; } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return new SolidColorBrush(Color.FromArgb(A, R, G, B)); 
    } 
} 

而且類似MarkupExtension也可用於Color

<SolidColorBrush Color="{markup:FromArgb 255, 255, 200, 150}"/> 

FromArgbExtension

public class FromArgbExtension : MarkupExtension 
{ 
    public FromArgbExtension() { } 
    public FromArgbExtension(byte a, byte r, byte g, byte b) 
    { 
     A = a; 
     R = r; 
     G = g; 
     B = b; 
    } 

    public byte A { get; set; } 
    public byte R { get; set; } 
    public byte G { get; set; } 
    public byte B { get; set; } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return Color.FromArgb(A, R, G, B); 
    } 
} 
+0

那就是黃金。你知道sc是什麼意思嗎?你也知道這是否比在程序性能方面使用HTML顏色更慢或更快?我記得有一位朋友告訴我WPF使用HTML顏色,因爲它們解析速度更快。 – 2010-11-11 20:28:44

+1

好問題,scRGB代表什麼?任何人? :)我不相信解析中有任何實時差異,但我無法確定。但是,除非這對你來說是一個真正的瓶頸,否則這聽起來像是不成熟的優化:) – 2010-11-11 20:40:01

+0

你指定的顏色在scRGB色彩空間中:http://en.wikipedia.org/wiki/ScRGB – 2010-11-11 20:45:22

相關問題