2014-07-10 2 views
0

J'ai un problème.Comment appeler ma méthode dans mainWindow pour linearGradientBrush?

Je voudrais appeler ma méthode en XAML (mainWindow) dans LinearGradientBrush ->GradientStop

Je voudrais changer de couleur en arrière-plan pour une animation. J'ai une fonction qui a plusieurs paramètres tels que:

public static List<Color> GetGradientColors(Color start, Color end, int steps) 
{ 
    return GetGradientColors(start, end, steps, 0, steps - 1); 
} 

public static List<Color> GetGradientColors(Color start, Color end, int steps, int firstStep, int lastStep) 
{ 
    var colorList = new List<Color>(); 
    if (steps <= 0 || firstStep < 0 || lastStep > steps - 1) 
     return colorList; 

    double aStep = (end.A - start.A)/steps; 
    double rStep = (end.R - start.R)/steps; 
    double gStep = (end.G - start.G)/steps; 
    double bStep = (end.B - start.B)/steps; 

    for (int i = firstStep; i < lastStep; i++) 
    { 
     byte a = (byte)(start.A + (int)(aStep * i)); 
     byte r = (byte)(start.R + (int)(rStep * i)); 
     byte g = (byte)(start.G + (int)(gStep * i)); 
     byte b = (byte)(start.B + (int)(bStep * i)); 
     colorList.Add(Color.FromArgb(a, r, g, b)); 
    } 

    return colorList; 
} 

Dans le code XAML:

<LinearGradientBrush StartPoint="0.0, 0.6" EndPoint="1.0, 0.6"> 
    <GradientStop Color="{ Binding GetGradientColors(green, yellow, 2)}" Offset="0"/> 
</LinearGradientBrush> 

Est-il possible de le faire?

+0

Pourquoi essayez-vous de faire? La brosse de dégradé interpole tout seul, vous avez juste besoin d'un arrêt pour «vert» et un pour «jaune». –

Répondre

0

d'abord déclarer une propriété de type ObservableCollection<Color>, disons nommé Colours:

public ObservableCollection<Color> Colours { get; set; } 

Ensuite, définissez la propriété dans votre constructeur:

Colours = GetGradientColors(Colors.Green, Colors.Yellow, 2); 

Rabattre de données en XAML:

Ce n'est pas exactement ce que vous vouliez, mais c'est presque aussi proche que vous le voulez.

0

Vous pouvez implémenter un converter qui peut être utilisé in the binding et transmettre tous les arguments requis comme Binding.ConverterParameter.

Sinon, car cela ne nécessite pas un « obligatoire » de toute façon, vous pourriez mettre en œuvre un markup extension, qui prend les arguments en tant que paramètres du constructeur:

<GradientStop Color="{me:GradientColor Green, Yellow, 2}" Offset="0"/> 
+0

S'il vous plait Voulez-vous me dire comment appeler votre fonction GetGradientColors() dans GradientStop? Je ne peux pas appeler ça. Et merci de répondre. – DeveloperTech2013

+0

@ DeveloperTech2013: Lire la documentation à laquelle je suis lié pour les méthodes respectives, devrait contenir toutes les informations dont vous avez besoin. –

Questions connexes