2010-11-11 91 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

相关问题