web-dev-qa-db-fra.com

Comment puis-je définir des valeurs de couleurs personnalisées dans un champ Xaml Value?

J'ai donc du XAML comme ceci:

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

Comment puis-je définir la couleur Red, quelque chose comme 250 200 150? J'ai essayé Color 250 200 150, et 250 200 150, mais ne fonctionne pas. Des idées?

39
Joan Venge

Utilisez des couleurs de style HTML.

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

Ou, si vous voulez une transparence alpha:

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

Ou en utilisant votre exemple de couleur de 250 200 150:

    <Trigger Property="ItemsControl.AlternationIndex" Value="2">
        <Setter Property="Background" Value="#FAC896"></Setter>
    </Trigger>
49
David Yaw

Désolé, j'avais tort ici. La façon de l'utiliser est avec des valeurs à virgule flottante allant de 0 à 1.

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

Pour utiliser les valeurs ARGB, nous devons utiliser ceci, un peu moins directement

<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> 

Mise à jour
Vous pouvez également utiliser un MarkupExtension personnalisé

<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));
    }
}

Et un MarkupExtension similaire pourrait également être utilisé pour 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);
    }
}
19
Fredrik Hedblad

Vous pouvez définir la propriété "background" sur un élément de contrôle XAML comme une valeur hexadécimale directement.

<Button Background="#292929">

Et vous pouvez également ajouter l'alpha au début si vous le souhaitez.

<Button Background="#55292929">

En savoir plus ici

2
Nathaniel Ruiz