Vue d’ensemble des pinceaux WPF
Tout ce qui est visible sur votre écran est visible, car il a été peint par un pinceau. Par exemple, un pinceau est utilisé pour décrire l’arrière-plan d’un bouton, le premier plan du texte et le remplissage d’une forme. Cette rubrique présente les concepts de la peinture avec des pinceaux WPF (Windows Presentation Foundation) et fournit des exemples. Les pinceaux vous permettent de peindre des objets d’interface utilisateur avec des couleurs simples et solides à des ensembles complexes de motifs et d’images.
Peinture avec un pinceau
Un Brush « peint » une zone avec ses résultats. Différents pinceaux ont différents types de sortie. Certains pinceaux peintnt une zone avec une couleur unie, d’autres avec un dégradé, un motif, une image ou un dessin. L’illustration suivante montre des exemples de chacun des types de Brush différents.
Exemples de pinceau
La plupart des objets visuels vous permettent de spécifier la façon dont ils sont peints. Le tableau suivant répertorie certains objets et propriétés courants avec lesquels vous pouvez utiliser un Brush.
Classe | Propriétés de pinceau |
---|---|
Border | BorderBrush, Background |
Control | Background, Foreground |
Panel | Background |
Pen | Brush |
Shape | Fill, Stroke |
TextBlock | Background |
Les sections suivantes décrivent les différents types Brush et fournissent un exemple de chacun d’eux.
Peindre avec une couleur unie
Un SolidColorBrush peint une zone avec une Color unie. Il existe différentes façons de spécifier la Color d’un SolidColorBrush: par exemple, vous pouvez spécifier ses canaux alpha, rouge, bleu et vert ou utiliser l’une des couleurs prédéfinies fournies par la classe Colors.
L’exemple suivant utilise un SolidColorBrush pour peindre le Fill d’un Rectangle. L’illustration suivante montre le rectangle peint.
Rectangle peint avec un SolidColorBrush
Rectangle exampleRectangle = new Rectangle();
exampleRectangle.Width = 75;
exampleRectangle.Height = 75;
// Create a SolidColorBrush and use it to
// paint the rectangle.
SolidColorBrush myBrush = new SolidColorBrush(Colors.Red);
exampleRectangle.Fill = myBrush;
Dim exampleRectangle As New Rectangle()
exampleRectangle.Width = 75
exampleRectangle.Height = 75
' Create a SolidColorBrush and use it to
' paint the rectangle.
Dim myBrush As New SolidColorBrush(Colors.Red)
exampleRectangle.Fill = myBrush
<Rectangle Width="75" Height="75">
<Rectangle.Fill>
<SolidColorBrush Color="Red" />
</Rectangle.Fill>
</Rectangle>
Pour plus d'informations sur la classe SolidColorBrush, consultez Vue d'ensemble de la peinture avec des couleurs solides et des dégradés.
Peindre avec un dégradé linéaire
Un LinearGradientBrush applique un dégradé linéaire à une zone. Un dégradé linéaire fusionne deux couleurs ou plus sur une ligne, l’axe du dégradé. Vous utilisez GradientStop objets pour spécifier les couleurs dans le dégradé et leurs positions.
L’exemple suivant utilise un LinearGradientBrush pour peindre le Fill d’un Rectangle. L’illustration suivante montre le rectangle peint.
Rectangle peint à l’aide d’un LinearGradientBrush
Rectangle exampleRectangle = new Rectangle();
exampleRectangle.Width = 75;
exampleRectangle.Height = 75;
// Create a LinearGradientBrush and use it to
// paint the rectangle.
LinearGradientBrush myBrush = new LinearGradientBrush();
myBrush.GradientStops.Add(new GradientStop(Colors.Yellow, 0.0));
myBrush.GradientStops.Add(new GradientStop(Colors.Orange, 0.5));
myBrush.GradientStops.Add(new GradientStop(Colors.Red, 1.0));
exampleRectangle.Fill = myBrush;
Dim exampleRectangle As New Rectangle()
exampleRectangle.Width = 75
exampleRectangle.Height = 75
' Create a LinearGradientBrush and use it to
' paint the rectangle.
Dim myBrush As New LinearGradientBrush()
myBrush.GradientStops.Add(New GradientStop(Colors.Yellow, 0.0))
myBrush.GradientStops.Add(New GradientStop(Colors.Orange, 0.5))
myBrush.GradientStops.Add(New GradientStop(Colors.Red, 1.0))
exampleRectangle.Fill = myBrush
<Rectangle Width="75" Height="75">
<Rectangle.Fill>
<LinearGradientBrush>
<GradientStop Color="Yellow" Offset="0.0" />
<GradientStop Color="Orange" Offset="0.5" />
<GradientStop Color="Red" Offset="1.0" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
Pour plus d’informations sur la classe LinearGradientBrush, consultez Peinture avec des couleurs solides et des dégradés : vue d’ensemble.
Peindre avec un dégradé radial
Un RadialGradientBrush peint une zone avec un dégradé radial. Un dégradé radial fusionne deux couleurs ou plus sur un cercle. Comme avec la classe LinearGradientBrush, vous utilisez des objets GradientStop pour spécifier les couleurs dans le dégradé et leurs positions.
L’exemple suivant utilise un RadialGradientBrush pour peindre le Fill d’un Rectangle. L’illustration suivante montre le rectangle peint.
RadialGradientBrush
Rectangle peint à l’aide d’un RadialGradientBrush
Rectangle exampleRectangle = new Rectangle();
exampleRectangle.Width = 75;
exampleRectangle.Height = 75;
// Create a RadialGradientBrush and use it to
// paint the rectangle.
RadialGradientBrush myBrush = new RadialGradientBrush();
myBrush.GradientOrigin = new Point(0.75, 0.25);
myBrush.GradientStops.Add(new GradientStop(Colors.Yellow, 0.0));
myBrush.GradientStops.Add(new GradientStop(Colors.Orange, 0.5));
myBrush.GradientStops.Add(new GradientStop(Colors.Red, 1.0));
exampleRectangle.Fill = myBrush;
Dim exampleRectangle As New Rectangle()
exampleRectangle.Width = 75
exampleRectangle.Height = 75
' Create a RadialGradientBrush and use it to
' paint the rectangle.
Dim myBrush As New RadialGradientBrush()
myBrush.GradientOrigin = New Point(0.75, 0.25)
myBrush.GradientStops.Add(New GradientStop(Colors.Yellow, 0.0))
myBrush.GradientStops.Add(New GradientStop(Colors.Orange, 0.5))
myBrush.GradientStops.Add(New GradientStop(Colors.Red, 1.0))
exampleRectangle.Fill = myBrush
<Rectangle Width="75" Height="75">
<Rectangle.Fill>
<RadialGradientBrush GradientOrigin="0.75,0.25">
<GradientStop Color="Yellow" Offset="0.0" />
<GradientStop Color="Orange" Offset="0.5" />
<GradientStop Color="Red" Offset="1.0" />
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>
Pour plus d'informations sur la classe RadialGradientBrush, consultez Vue d'ensemble de la peinture avec des couleurs solides et des dégradés.
Peindre avec une image
Un ImageBrush peint une zone avec une ImageSource.
L’exemple suivant utilise un ImageBrush pour peindre le Fill d’un Rectangle. L’illustration suivante montre le rectangle peint.
ImageBrush
Rectangle peint à l’aide d’une image
Rectangle exampleRectangle = new Rectangle();
exampleRectangle.Width = 75;
exampleRectangle.Height = 75;
// Create an ImageBrush and use it to
// paint the rectangle.
ImageBrush myBrush = new ImageBrush();
myBrush.ImageSource =
new BitmapImage(new Uri(@"sampleImages\pinkcherries.jpg", UriKind.Relative));
exampleRectangle.Fill = myBrush;
Dim exampleRectangle As New Rectangle()
exampleRectangle.Width = 75
exampleRectangle.Height = 75
' Create an ImageBrush and use it to
' paint the rectangle.
Dim myBrush As New ImageBrush()
myBrush.ImageSource = New BitmapImage(New Uri("sampleImages\pinkcherries.jpg", UriKind.Relative))
exampleRectangle.Fill = myBrush
<Rectangle Width="75" Height="75">
<Rectangle.Fill>
<ImageBrush ImageSource="sampleImages\pinkcherries.jpg" />
</Rectangle.Fill>
</Rectangle>
Pour plus d’informations sur la classe ImageBrush, consultez Peinture avec des images, des dessins et des visuels.
Peindre avec un dessin
Un DrawingBrush peint une zone avec un Drawing. Un Drawing peut contenir des formes, des images, du texte et des supports.
L’exemple suivant utilise un DrawingBrush pour peindre le Fill d’un Rectangle. L’illustration suivante montre le rectangle peint.
DrawingBrush
Rectangle peint avec un DrawingBrush
Rectangle exampleRectangle = new Rectangle();
exampleRectangle.Width = 75;
exampleRectangle.Height = 75;
// Create a DrawingBrush and use it to
// paint the rectangle.
DrawingBrush myBrush = new DrawingBrush();
GeometryDrawing backgroundSquare =
new GeometryDrawing(
Brushes.White,
null,
new RectangleGeometry(new Rect(0, 0, 100, 100)));
GeometryGroup aGeometryGroup = new GeometryGroup();
aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(0, 0, 50, 50)));
aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(50, 50, 50, 50)));
LinearGradientBrush checkerBrush = new LinearGradientBrush();
checkerBrush.GradientStops.Add(new GradientStop(Colors.Black, 0.0));
checkerBrush.GradientStops.Add(new GradientStop(Colors.Gray, 1.0));
GeometryDrawing checkers = new GeometryDrawing(checkerBrush, null, aGeometryGroup);
DrawingGroup checkersDrawingGroup = new DrawingGroup();
checkersDrawingGroup.Children.Add(backgroundSquare);
checkersDrawingGroup.Children.Add(checkers);
myBrush.Drawing = checkersDrawingGroup;
myBrush.Viewport = new Rect(0, 0, 0.25, 0.25);
myBrush.TileMode = TileMode.Tile;
exampleRectangle.Fill = myBrush;
Dim exampleRectangle As New Rectangle()
exampleRectangle.Width = 75
exampleRectangle.Height = 75
' Create a DrawingBrush and use it to
' paint the rectangle.
Dim myBrush As New DrawingBrush()
Dim backgroundSquare As New GeometryDrawing(Brushes.White, Nothing, New RectangleGeometry(New Rect(0, 0, 100, 100)))
Dim aGeometryGroup As New GeometryGroup()
aGeometryGroup.Children.Add(New RectangleGeometry(New Rect(0, 0, 50, 50)))
aGeometryGroup.Children.Add(New RectangleGeometry(New Rect(50, 50, 50, 50)))
Dim checkerBrush As New LinearGradientBrush()
checkerBrush.GradientStops.Add(New GradientStop(Colors.Black, 0.0))
checkerBrush.GradientStops.Add(New GradientStop(Colors.Gray, 1.0))
Dim checkers As New GeometryDrawing(checkerBrush, Nothing, aGeometryGroup)
Dim checkersDrawingGroup As New DrawingGroup()
checkersDrawingGroup.Children.Add(backgroundSquare)
checkersDrawingGroup.Children.Add(checkers)
myBrush.Drawing = checkersDrawingGroup
myBrush.Viewport = New Rect(0, 0, 0.25, 0.25)
myBrush.TileMode = TileMode.Tile
exampleRectangle.Fill = myBrush
<Rectangle Width="75" Height="75">
<Rectangle.Fill>
<DrawingBrush Viewport="0,0,0.25,0.25" TileMode="Tile">
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="White">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0,0,100,100" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,50,50" />
<RectangleGeometry Rect="50,50,50,50" />
</GeometryGroup>
</GeometryDrawing.Geometry>
<GeometryDrawing.Brush>
<LinearGradientBrush>
<GradientStop Offset="0.0" Color="Black" />
<GradientStop Offset="1.0" Color="Gray" />
</LinearGradientBrush>
</GeometryDrawing.Brush>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
Pour plus d’informations sur la classe DrawingBrush, consultez Peinture avec des images, des dessins et des visuels.
Peindre avec un visuel
Un VisualBrush peint une zone avec un objet Visual. Exemples d’objets visuels : Button, Pageet MediaElement. Un VisualBrush vous permet également de projeter du contenu d’une partie de votre application dans une autre zone ; il est très utile de créer des effets de réflexion et d’agrandir les parties de l’écran.
L’exemple suivant utilise un VisualBrush pour peindre le Fill d’un Rectangle. L’illustration suivante montre le rectangle peint.
Un Rectangle peint à l’aide d’un VisualBrush
Rectangle exampleRectangle = new Rectangle();
exampleRectangle.Width = 75;
exampleRectangle.Height = 75;
// Create a VisualBrush and use it
// to paint the rectangle.
VisualBrush myBrush = new VisualBrush();
//
// Create the brush's contents.
//
StackPanel aPanel = new StackPanel();
// Create a DrawingBrush and use it to
// paint the panel.
DrawingBrush myDrawingBrushBrush = new DrawingBrush();
GeometryGroup aGeometryGroup = new GeometryGroup();
aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(0, 0, 50, 50)));
aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(50, 50, 50, 50)));
RadialGradientBrush checkerBrush = new RadialGradientBrush();
checkerBrush.GradientStops.Add(new GradientStop(Colors.MediumBlue, 0.0));
checkerBrush.GradientStops.Add(new GradientStop(Colors.White, 1.0));
GeometryDrawing checkers = new GeometryDrawing(checkerBrush, null, aGeometryGroup);
myDrawingBrushBrush.Drawing = checkers;
aPanel.Background = myDrawingBrushBrush;
// Create some text.
TextBlock someText = new TextBlock();
someText.Text = "Hello, World";
FontSizeConverter fSizeConverter = new FontSizeConverter();
someText.FontSize = (double)fSizeConverter.ConvertFromString("10pt");
someText.Margin = new Thickness(10);
aPanel.Children.Add(someText);
myBrush.Visual = aPanel;
exampleRectangle.Fill = myBrush;
Dim exampleRectangle As New Rectangle()
exampleRectangle.Width = 75
exampleRectangle.Height = 75
' Create a VisualBrush and use it
' to paint the rectangle.
Dim myBrush As New VisualBrush()
'
' Create the brush's contents.
'
Dim aPanel As New StackPanel()
' Create a DrawingBrush and use it to
' paint the panel.
Dim myDrawingBrushBrush As New DrawingBrush()
Dim aGeometryGroup As New GeometryGroup()
aGeometryGroup.Children.Add(New RectangleGeometry(New Rect(0, 0, 50, 50)))
aGeometryGroup.Children.Add(New RectangleGeometry(New Rect(50, 50, 50, 50)))
Dim checkerBrush As New RadialGradientBrush()
checkerBrush.GradientStops.Add(New GradientStop(Colors.MediumBlue, 0.0))
checkerBrush.GradientStops.Add(New GradientStop(Colors.White, 1.0))
Dim checkers As New GeometryDrawing(checkerBrush, Nothing, aGeometryGroup)
myDrawingBrushBrush.Drawing = checkers
aPanel.Background = myDrawingBrushBrush
' Create some text.
Dim someText As New TextBlock()
someText.Text = "Hello, World"
Dim fSizeConverter As New FontSizeConverter()
someText.FontSize = CDbl(fSizeConverter.ConvertFromString("10pt"))
someText.Margin = New Thickness(10)
aPanel.Children.Add(someText)
myBrush.Visual = aPanel
exampleRectangle.Fill = myBrush
<Rectangle Width="75" Height="75">
<Rectangle.Fill>
<VisualBrush TileMode="Tile">
<VisualBrush.Visual>
<StackPanel>
<StackPanel.Background>
<DrawingBrush>
<DrawingBrush.Drawing>
<GeometryDrawing>
<GeometryDrawing.Brush>
<RadialGradientBrush>
<GradientStop Color="MediumBlue" Offset="0.0" />
<GradientStop Color="White" Offset="1.0" />
</RadialGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,50,50" />
<RectangleGeometry Rect="50,50,50,50" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</StackPanel.Background>
<TextBlock FontSize="10pt" Margin="10">Hello, World!</TextBlock>
</StackPanel>
</VisualBrush.Visual>
</VisualBrush>
</Rectangle.Fill>
</Rectangle>
Pour plus d’informations sur la classe VisualBrush, consultez Peinture avec des images, des dessins et des visuels.
Peindre à l’aide de pinceaux prédéfinis et pinceaux système
Pour des raisons pratiques, Windows Presentation Foundation (WPF) fournit un ensemble de pinceaux prédéfinis et système que vous pouvez utiliser pour peindre des objets.
Pour obtenir la liste des pinceaux prédéfinis disponibles, consultez la classe Brushes. Pour obtenir un exemple montrant comment utiliser un pinceau prédéfini, consultez Peindre une zone avec une couleur pleine.
Pour obtenir la liste des pinceaux système disponibles, consultez la classe SystemColors. Pour obtenir un exemple, voir Peindre une zone avec un pinceau système.
Fonctionnalités courantes du pinceau
Brush objets fournissent une propriété Opacity qui peut être utilisée pour rendre un pinceau transparent ou partiellement transparent. Une valeur Opacity de 0 rend un pinceau complètement transparent, tandis qu’une valeur de Opacity de 1 rend un pinceau complètement opaque. L’exemple suivant utilise la propriété Opacity pour rendre une SolidColorBrush 25 pour cent opaque.
<Rectangle Width="100" Height="100">
<Rectangle.Fill>
<SolidColorBrush Color="Blue" Opacity="0.25" />
</Rectangle.Fill>
</Rectangle>
Rectangle myRectangle = new Rectangle();
myRectangle.Width = 100;
myRectangle.Height = 100;
SolidColorBrush partiallyTransparentSolidColorBrush
= new SolidColorBrush(Colors.Blue);
partiallyTransparentSolidColorBrush.Opacity = 0.25;
myRectangle.Fill = partiallyTransparentSolidColorBrush;
Si le pinceau contient des couleurs partiellement transparentes, la valeur d’opacité de la couleur est combinée par multiplication avec la valeur d’opacité du pinceau. Par exemple, si un pinceau a une valeur d’opacité de 0,5 et qu’une couleur utilisée dans le pinceau a également une valeur d’opacité de 0,5, la couleur de sortie a une valeur d’opacité de 0,25.
Remarque
Il est plus efficace de modifier la valeur d’opacité d’un pinceau que de modifier l’opacité d’un élément entier à l’aide de sa propriété UIElement.Opacity.
Vous pouvez faire pivoter, mettre à l’échelle, incliner et translater le contenu d’un pinceau à l’aide de ses propriétés Transform ou RelativeTransform. Pour plus d’informations, consultez Vue d’ensemble des transformations du pinceau.
Étant donné qu’ils sont Animatable objets, Brush objets peuvent être animés. Pour plus d’informations, consultez Vue d’ensemble de l’animation.
Fonctionnalités congelables
Étant donné qu’elle hérite de la classe Freezable, la classe Brush fournit plusieurs fonctionnalités spéciales : Brush objets peuvent être déclarés en tant que ressources , partagées entre plusieurs objets et clonées. En outre, tous les types Brush, sauf VisualBrush, peuvent être rendus en lecture seule pour améliorer les performances et être rendus sûrs pour les threads.
Pour plus d’informations sur les différentes fonctionnalités fournies par les objets Freezable, consultez vue d'ensemble des objets gelables.
Pour plus d’informations sur les raisons pour lesquelles les objets VisualBrush ne peuvent pas être gelés, consultez la page de type VisualBrush.
Voir aussi
- Brush
- Brushes
- Vue d’ensemble de la peinture avec des couleurs unies ou des dégradés
- peinture avec des images, des dessins et des visuels
- Vue d'ensemble des objets gelables
- Pinceaux, exemple
- Exemple d’ImageBrush
- Exemple de VisualBrush
- Rubriques de tutoriels
- autres recommandations de performances
.NET Desktop feedback