2010-11-19 2 views
1

dans mon XAML j'ai:Dans Silverlight 4: comment obtenir la couleur de la propriété Fill

<Canvas Grid.Row="1" Background="#FFF2F2F2" Width="78" HorizontalAlignment="Left"> 
      <Rectangle Height="67" x:Name="rectFront" Width="70" Fill="#FF000000" Stroke="#FFB9B9B9" StrokeThickness="3" StrokeLineJoin="Miter" StrokeStartLineCap="Flat" Stretch="Uniform" Canvas.Left="4"/> 
</Canvas> 

dans le code CS:

someColor = rectFront.Fill; // <-- error here, can't convert Brush to Color 

qui tout à fait logique. Mais comment puis-je convertir l'attribut de couleur de la brosse hors du remplissage?

Merci

simple code

Répondre

2

Voici le problème .... il existe plusieurs types de balais. Ainsi, vous devrez accéder à la propriété de couleur différemment selon le type de brosse que vous obtenez.

SolidColorBrush
LinearGradientBrush
RadialGradientBrush

si vous voulez la couleur du pinceau, et il est un SolidColorBrush alors vous pouvez jeter et obtenir la couleur de cette façon:

if (rectFront.Fill is SolidColorBrush) 
{ 
     SolidColorBrush brush = rectFront.Fill as SolidColorBrush; 
     someColor = brush.Color 
} 

autrement, vous vont devoir accéder à la collection GradientStops:

// Generally a GradientStopCollection contains a minimum of two gradient stops. 
if (rectFront.Fill is GradientBrush) 
{ 
    GradientBrush brush = rectFront.Fill as GradientBrush ; 
    someColor = brush.GradientStops[ 0 ].Color 
} 
4

Moulage à un SolidColorBrush;

var brush = rectFront.Fill as SolidColorBrush; 
if(brush != null) 
    someColor = brush.Color 
Questions connexes