Översikt över WPF-penslar
Allt som visas på skärmen är synligt eftersom det målades av en pensel. En pensel används till exempel för att beskriva bakgrunden till en knapp, textens förgrund och fyllning av en form. Det här avsnittet beskriver begreppen måleri med WPF-penslar (Windows Presentation Foundation) och innehåller exempel. Med penslar kan du måla användargränssnittsobjekt med allt från enkla, solida färger till komplexa uppsättningar mönster och bilder.
Måla med pensel
En Brush färgar ett område med sitt resultat. Olika penslar har olika typer av utdata. Vissa penslar målar ett område med en fast färg, andra med toning, mönster, bild eller ritning. Följande bild visar exempel på var och en av de olika Brush typerna.
Penselexempel
Med de flesta visuella objekt kan du ange hur de ska målas. I följande tabell visas några vanliga objekt och egenskaper som du kan använda med Brush.
Klass | Penselegenskaper |
---|---|
Border | BorderBrush, Background |
Control | Background, Foreground |
Panel | Background |
Pen | Brush |
Shape | Fill, Stroke |
TextBlock | Background |
I följande avsnitt beskrivs de olika Brush typerna och ett exempel på var och en.
Måla med en solid färg
En SolidColorBrush målar ett område med en enfärgad Color. Det finns en mängd olika sätt att ange Color för en SolidColorBrush: du kan till exempel ange dess alfa-, röd-, blå- och gröna kanaler eller använda en av de fördefinierade färger som tillhandahålls av klassen Colors.
I följande exempel används en SolidColorBrush för att måla Fill för en Rectangle. Följande bild visar den målade rektangeln.
En rektangel målad med en 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>
För mer information om klassen SolidColorBrush, se Översikt över målning med solida färger och gradienter.
Måla med linjär toning
En LinearGradientBrush färgar ett område med linjär toning. En linjär toning blandar två eller flera färger längs en linje, toningsaxeln. Du använder GradientStop objekt för att ange färgerna i toningen och deras positioner.
I följande exempel används en LinearGradientBrush för att måla Fill på en Rectangle. Följande bild visar den målade rektangeln.
En rektangel målad med hjälp av en 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>
Mer information om klassen LinearGradientBrush finns i Painting with Solid Colors and Gradients Overview.
Måla med en radiell gradient
En RadialGradientBrush målar ett område med en radiell gradient. En radiell toning blandar två eller flera färger över en cirkel. Precis som med klassen LinearGradientBrush använder du GradientStop objekt för att ange färgerna i toningen och deras positioner.
I följande exempel används en RadialGradientBrush för att måla Fill för en Rectangle. Följande bild visar den målade rektangeln.
En rektangel målad med hjälp av en 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>
För mer information om klassen RadialGradientBrush, se Översikt över målning med solida färger och gradienter.
Måla med en bild
En ImageBrush målar ett område med en ImageSource.
I följande exempel används en ImageBrush för att måla Fill för en Rectangle. Följande bild visar den målade rektangeln.
En rektangel målad med hjälp av en bild
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>
Mer information om klassen ImageBrush finns i Painting with Images, Drawings, and Visuals.
Måla med en ritning
En DrawingBrush målar ett område med en Drawing. En Drawing kan innehålla former, bilder, text och media.
I följande exempel används en DrawingBrush för att måla Fill på en Rectangle. Följande bild visar den målade rektangeln.
En rektangel målad med en 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>
Mer information om klassen DrawingBrush finns i Painting with Images, Drawings, and Visuals.
Måla med visuella element
En VisualBrush målar ett område med ett Visual objekt. Exempel på visuella objekt är Button, Pageoch MediaElement. Med en VisualBrush kan du också projicera innehåll från en del av programmet till ett annat område. Det är mycket användbart för att skapa reflektionseffekter och förstoringsdelar av skärmen.
I följande exempel används en VisualBrush för att måla Fill på en Rectangle. Följande bild visar den målade rektangeln.
En rektangel målad med hjälp av en 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>
Mer information om klassen VisualBrush finns i Painting with Images, Drawings, and Visuals.
Måla med fördefinierade penslar och systemborstar
För enkelhetens skull tillhandahåller Windows Presentation Foundation (WPF) en uppsättning fördefinierade penslar och systemborstar som du kan använda för att måla objekt.
En lista över tillgängliga fördefinierade penslar finns i klassen Brushes. För att se ett exempel på hur man använder en fördefinierad pensel, se Måla ett område med en solid färg.
En lista över tillgängliga systemborstar finns i klassen SystemColors. Ett exempel finns i Måla ett område med en systemborste.
Vanliga penselfunktioner
Brush objekt ger en Opacity egenskap som kan användas för att göra en pensel transparent eller delvis transparent. Ett Opacity värde på 0 gör en borste helt transparent, medan ett Opacity värde på 1 gör en borste helt ogenomskinlig. I följande exempel används egenskapen Opacity för att göra en SolidColorBrush 25 procent ogenomskinlig.
<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;
Om penseln innehåller färger som är delvis transparenta kombineras färgens opacitetsvärde genom multiplikation med penselns ogenomskinlighetsvärde. Om en pensel till exempel har ett ogenomskinlighetsvärde på 0,5 och en färg som används i penseln också har ett opacitetsvärde på 0,5, har utdatafärgen ett ogenomskinlighetsvärde på 0,25.
Note
Det är mer effektivt att ändra opacitetsvärdet för en pensel än att ändra opaciteten för ett helt element med hjälp av dess egenskap UIElement.Opacity.
Du kan rotera, skala, snedställa och översätta en pensels innehåll med hjälp av dess Transform- eller RelativeTransform egenskaper. Mer information finns i översikten över penselomvandling.
Eftersom de är Animatable-objekt kan Brush-objekt animeras. För mer information, se översikt över animering.
Funktionen för fryst läge
Eftersom den ärver från klassen Freezable innehåller klassen Brush flera specialfunktioner: Brush objekt kan deklareras som resurser, delas mellan flera objekt och klonas. Dessutom kan alla Brush-typer förutom VisualBrush göras skrivskyddade för att förbättra prestanda och göras trådsäkra.
Mer information om de olika funktionerna som tillhandahålls av Freezable-objekt finns i Översikt över frysta objekt.
Mer information om varför VisualBrush objekt inte kan frysas finns på sidan VisualBrush typ.
Se även
.NET Desktop feedback