Partilhar via


Visão geral de pincéis do WPF

Tudo o que está visível na tela é visível porque foi pintado por um pincel. Por exemplo, um pincel é usado para descrever a tela de fundo de um botão, o primeiro plano do texto e o preenchimento de uma forma. Este tópico apresenta os conceitos de pintura com pincéis do Windows Presentation Foundation (WPF) e fornece exemplos. Pincéis permitem pintar objetos de interface do usuário (interface do usuário) com qualquer coisa, desde cores simples e sólidas até conjuntos complexos de padrões e imagens.

Pintando com um pincel

Um Brush "pinta" uma área com a saída dele. Pincéis diferentes têm diferentes tipos de saída. Alguns pincéis pintam uma área com uma cor sólida, outros com um gradiente, padrão, imagem ou desenho. A ilustração a seguir mostra exemplos de cada um dos diferentes tipos de Brush.

tipos de pincel Tipos de pincel
Exemplos de pincel

A maioria dos objetos visuais permite especificar como eles são pintados. A tabela a seguir lista alguns objetos e propriedades comuns com os quais você pode usar um Brush.

Classe Propriedades de pincel
Border BorderBrush, Background
Control Background, Foreground
Panel Background
Pen Brush
Shape Fill, Stroke
TextBlock Background

As seções a seguir descrevem os diferentes tipos de Brush e fornecem um exemplo de cada um.

Pintar com uma cor sólida

Um SolidColorBrush pinta uma área com um Color sólido. Há várias maneiras de especificar o Color de um SolidColorBrush: por exemplo, você pode especificar seus canais alfa, vermelho, azul e verde ou usar uma das cores predefinidas fornecidas pela classe Colors.

O exemplo a seguir usa um SolidColorBrush para pintar o Fill de um Rectangle. A ilustração a seguir mostra o retângulo pintado.

Um retângulo pintado usando um SolidColorBrush
Um retângulo pintado usando um 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>

Para obter mais informações sobre a classe SolidColorBrush, consulte Visão geral de pintura com cores sólidas e gradientes.

Pintar com um gradiente linear

Um LinearGradientBrush pinta uma área com um gradiente linear. Um gradiente linear mescla duas ou mais cores em uma linha, o eixo de gradiente. Você usa objetos GradientStop para especificar as cores do gradiente e suas posições.

O exemplo a seguir usa um LinearGradientBrush para pintar o Fill de um Rectangle. A ilustração a seguir mostra o retângulo pintado.

Um retângulo pintado usando um LinearGradientBrush
Um retângulo pintado usando um 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>

Para obter mais informações sobre a classe LinearGradientBrush, consulte Visão geral de pintura com cores sólidas e gradientes.

Pintar com um gradiente radial

Um RadialGradientBrush pinta uma área com um gradiente radial. Um gradiente radial mescla duas ou mais cores em um círculo. Assim como acontece com a classe LinearGradientBrush, você usa objetos GradientStop para especificar as cores no gradiente e suas posições.

O exemplo a seguir usa um RadialGradientBrush para pintar o Fill de um Rectangle. A ilustração a seguir mostra o retângulo pintado.

Um retângulo pintado usando um RadialGradientBrush PincelDeGradienteRadial
Um retângulo pintado usando um 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>

Para obter mais informações sobre a classe RadialGradientBrush, consulte Visão Geral de Pintura com Cores Sólidas e Gradientes.

Pintar com uma imagem

Um ImageBrush pinta uma área com um ImageSource.

O exemplo a seguir usa um ImageBrush para pintar o Fill de um Rectangle. A ilustração a seguir mostra o retângulo pintado.

Um Rectangle pintado por um ImageBrush
Um retângulo pintado usando uma imagem

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>

Para obter mais informações sobre a classe ImageBrush, consulte Pintura com Imagens, Desenhos e Visuais.

Pintar com um Drawing

Um DrawingBrush pinta uma área com um Drawing. Um Drawing pode conter formas, imagens, texto e mídia.

O exemplo a seguir usa um DrawingBrush para pintar o Fill de um Rectangle. A ilustração a seguir mostra o retângulo pintado.

Um retângulo pintado usando um DrawingBrush
Um retângulo pintado usando um 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>

Para obter mais informações sobre a classe DrawingBrush, consulte Pintura com Imagens, Desenhos e Visuais.

Pintar com um Visual

Um VisualBrush pinta uma área usando um objeto Visual. Exemplos de objetos visuais incluem Button, Pagee MediaElement. Um VisualBrush também permite projetar conteúdo de uma parte do aplicativo em outra área; é muito útil para criar efeitos de reflexão e ampliar partes da tela.

O exemplo a seguir usa um VisualBrush para pintar o Fill de um Rectangle. A ilustração a seguir mostra o retângulo pintado.

Um retângulo pintado usando um VisualBrush
Um retângulo pintado usando um 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>

Para obter mais informações sobre a classe VisualBrush, consulte Pintura com Imagens, Desenhos e Visuais.

Pintar usando pincéis do sistema e predefinidos

Para conveniência, o Windows Presentation Foundation (WPF) fornece um conjunto de pincéis predefinidos e do sistema que você pode usar para pintar objetos.

Recursos comuns de pincel

Brush objetos fornecem uma propriedade Opacity que pode ser usada para tornar um pincel transparente ou parcialmente transparente. Um valor Opacity de 0 torna um pincel completamente transparente, enquanto um valor Opacity de 1 torna um pincel completamente opaco. O exemplo a seguir usa a propriedade Opacity para tornar uma SolidColorBrush 25% opaca.

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

Se o pincel contiver cores parcialmente transparentes, o valor de opacidade da cor será combinado por meio da multiplicação com o valor de opacidade do pincel. Por exemplo, se um pincel tiver um valor de opacidade de 0,5 e uma cor usada no pincel também tiver um valor de opacidade de 0,5, a cor de saída terá um valor de opacidade de 0,25.

Nota

É mais eficiente alterar o valor de opacidade de um pincel do que alterar a opacidade de um elemento inteiro usando sua propriedade UIElement.Opacity.

Você pode girar, dimensionar, distorcer e traduzir o conteúdo de um pincel usando suas propriedades Transform ou RelativeTransform. Para obter mais informações, veja Visão geral da transformação de pincel.

Como são objetos Animatable, Brush objetos podem ser animados. Para obter mais informações, consulte Visão geral da animação.

Recursos congeláveis

Como herda da classe Freezable, a classe Brush fornece várias funcionalidades especiais: objetos Brush podem ser declarados como recursos ; compartilhados entre vários objetos; e clonados. Além disso, todos os tipos de Brush, exceto o VisualBrush, podem ser definidos como somente leitura para melhorar o desempenho e ficarem thread-safe.

Para obter mais informações sobre os diferentes recursos fornecidos pelos objetos Freezable, consulte Visão geral de objetos congeláveis.

Para obter mais informações sobre por que objetos VisualBrush não podem ser congelados, consulte a página do tipo VisualBrush.

Consulte também