Přehled štětců WPF
Všechno viditelné na obrazovce je viditelné, protože ho namaloval štětec. Například štětec slouží k popisu pozadí tlačítka, popředí textu a výplně obrazce. Toto téma představuje koncepty malování pomocí štětců WPF (Windows Presentation Foundation) a poskytuje příklady. Štětce umožňují malovat objekty uživatelského rozhraní s čímkoli od jednoduchých, plných barev až po složité sady vzorů a obrázků.
Malování štětcem
Brush "maluje" oblast svým výstupem. Různé štětce mají různé typy výstupu. Některé štětce malují oblast plnou barvou, jiné s přechodem, vzorem, obrázkem nebo výkresem. Následující obrázek ukazuje příklady jednotlivých typů Brush.
Příklady štětců
Většina vizuálních objektů umožňuje určit, jak se malují. Následující tabulka uvádí některé běžné objekty a vlastnosti, se kterými můžete použít Brush.
Třída | Vlastnosti štětce |
---|---|
Border | BorderBrush, Background |
Control | Background, Foreground |
Panel | Background |
Pen | Brush |
Shape | Fill, Stroke |
TextBlock | Background |
Následující části popisují různé typy Brush a poskytují příklad jednotlivých typů.
Malovat jednolitou barvou
SolidColorBrush maluje oblast jednolitou barvou Color. Existují různé způsoby, jak zadat ColorSolidColorBrush: můžete například zadat její alfa, červené, modré a zelené kanály, nebo použít některou z předdefinovaných barev, které poskytuje třída Colors.
Následující příklad používá SolidColorBrush pro namalování Fill barvy Rectangle. Následující obrázek znázorňuje malovaný obdélník.
SolidColorBrush
Obdélník malovaný pomocí 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>
Další informace o třídě SolidColorBrush naleznete v tématu Přehled malby s plnými barvami a přechody.
Malovat s lineárním přechodem
LinearGradientBrush nakreslí oblast lineárním přechodem. Lineární gradient míchá dvě nebo více barev podél osy, která je osou přechodu. Objekty GradientStop slouží k určení barev v přechodu a jejich pozicích.
Následující příklad používá LinearGradientBrush k malování na FillRectangle. Následující obrázek znázorňuje malovaný obdélník.
Obdélník malovaný pomocí 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>
Další informace o LinearGradientBrush třídy naleznete v tématu Obraz s plnými barvami a přechody Přehled.
Malování s radiálním přechodem
RadialGradientBrush maluje oblast radiálním přechodem. Paprskový přechod prolíná dvě nebo více barev v kruhu. Stejně jako u třídy LinearGradientBrush použijete GradientStop objekty k určení barev v přechodu a jejich pozicích.
Následující příklad používá RadialGradientBrush pro malování Fill na Rectangle. Následující obrázek znázorňuje malovaný obdélník.
Obdélník malovaný pomocí 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>
Další informace o třídě RadialGradientBrush viz Přehled malby plnými barvami a přechody.
Malování pomocí obrázku
ImageBrush maluje oblast pomocí ImageSource.
Následující příklad používá ImageBrush k vymalování Fill ze Rectangle. Následující obrázek znázorňuje malovaný obdélník.
Obdélník malovaný pomocí obrázku
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>
Další informace o třídě ImageBrush naleznete v tématu Malování s obrázky, kresbami a vizuály.
Malování pomocí kresby
DrawingBrush maluje oblast s Drawing. Drawing může obsahovat obrazce, obrázky, text a média.
Následující příklad používá DrawingBrush k namalování FillRectangle. Následující obrázek znázorňuje malovaný obdélník.
Obdélník malovaný pomocí 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>
Pro více informací o třídě DrawingBrush naleznete v tématu Malování s obrázky, kresbami a vizuály.
Malování pomocí vizuálu
VisualBrush maluje oblast s objektem Visual. Příklady vizuálních objektů zahrnují Button, Pagea MediaElement. VisualBrush také umožňuje projektovat obsah z jedné části aplikace do jiné oblasti; Je velmi užitečné při vytváření efektů odrazu a zvětšení částí obrazovky.
Následující příklad používá VisualBrush pro malování FillRectangle. Následující obrázek znázorňuje malovaný obdélník.
Obdélník malovaný pomocí vizuálního štětce
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>
Další informace o třídě VisualBrush viz Malování s obrazy, kresbami a vizuály.
Malování pomocí předdefinovaných a systémových štětců
Pro usnadnění poskytuje Windows Presentation Foundation (WPF) sadu předdefinovaných a systémových štětců, které můžete použít k malování objektů.
Seznam dostupných předdefinovaných štětců najdete v Brushes třídě. Příklad znázorňující použití předdefinovaného štětce najdete v tématu Malování oblasti pomocíplnou barvou .
Seznam dostupných systémových štětců najdete v SystemColors třídě. Příklad viz Malování oblasti pomocí systémového štětce.
Běžné funkce štětce
Brush objekty poskytují vlastnost Opacity, kterou lze použít k nastavení štětce jako průhledného nebo částečně průhledného. Hodnota Opacity 0 dělá štětec zcela průhledný, zatímco Opacity hodnota 1 dělá štětec zcela neprůhledný. Následující příklad používá vlastnost Opacity, aby bylo SolidColorBrush 25 procent neprůhledné.
<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;
Pokud štětec obsahuje barvy, které jsou částečně průhledné, hodnota jejich neprůhlednosti se kombinuje násobením s hodnotou neprůhlednosti štětce. Pokud má například štětec hodnotu neprůhlednosti 0,5 a barva použitá v štětci má také neprůhlednou hodnotu 0,5, má výstupní barva hodnotu neprůhlednosti 0,25.
Poznámka
Je efektivnější změnit hodnotu neprůhlednosti štětce, než je změnit neprůhlednost celého prvku pomocí jeho vlastnosti UIElement.Opacity.
Obsah štětce můžete otočit, škálovat, zkosit a přeložit pomocí jeho Transform nebo RelativeTransform vlastností. Další informace naleznete v tématu Přehled transformace štětce.
Vzhledem k tomu, že jsou Animatable objekty, mohou být Brush objekty animované. Další informace naleznete v tématu Přehled animací.
Zmrazitelné funkce
Vzhledem k tomu, že dědí z třídy Freezable, poskytuje třída Brush několik speciálních funkcí: Brush objekty lze deklarovat jako prostředky, sdíleny mezi více objekty a klonovány. Kromě toho lze všechny typy Brush s výjimkou VisualBrush zpřístupnit pouze pro čtení, aby se zlepšil výkon, a budou bezpečné pro přístup z více vláken.
Další informace o různých funkcích poskytovaných objekty Freezable naleznete v tématu Přehled zamrznutelných objektů.
Další informace o tom, proč nelze VisualBrush objekty zmrazit, naleznete na stránce s typem VisualBrush.
Viz také
.NET Desktop feedback