TileBrush Class
Describes a way to paint a region by using one or more tiles.
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
System.Windows.Freezable
System.Windows.Media.Animation.Animatable
System.Windows.Media.Brush
System.Windows.Media.TileBrush
System.Windows.Media.DrawingBrush
System.Windows.Media.ImageBrush
System.Windows.Media.VisualBrush
Namespace: System.Windows.Media
Assembly: PresentationCore (in PresentationCore.dll)
The TileBrush type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | AlignmentX | Gets or sets the horizontal alignment of content in the TileBrush base tile. |
![]() | AlignmentY | Gets or sets the vertical alignment of content in the TileBrush base tile. |
![]() | CanFreeze | Gets a value that indicates whether the object can be made unmodifiable. (Inherited from Freezable.) |
![]() | DependencyObjectType | Gets the DependencyObjectType that wraps the CLR type of this instance. (Inherited from DependencyObject.) |
![]() | Dispatcher | Gets the Dispatcher this DispatcherObject is associated with. (Inherited from DispatcherObject.) |
![]() | HasAnimatedProperties | Gets a value that indicates whether one or more AnimationClock objects is associated with any of this object's dependency properties. (Inherited from Animatable.) |
![]() | IsFrozen | Gets a value that indicates whether the object is currently modifiable. (Inherited from Freezable.) |
![]() | IsSealed | Gets a value that indicates whether this instance is currently sealed (read-only). (Inherited from DependencyObject.) |
![]() | Opacity | Gets or sets the degree of opacity of a Brush. (Inherited from Brush.) |
![]() | RelativeTransform | Gets or sets the transformation that is applied to the brush using relative coordinates. (Inherited from Brush.) |
![]() | Stretch | Gets or sets a value that specifies how the content of this TileBrush stretches to fit its tiles. |
![]() | TileMode | Gets or sets a value that specifies how a TileBrush fills the area that you are painting if the base tile is smaller than the output area. |
![]() | Transform | Gets or sets the transformation that is applied to the brush. This transformation is applied after the brush's output has been mapped and positioned. (Inherited from Brush.) |
![]() | Viewbox | Gets or sets the position and dimensions of the content in a TileBrush tile. |
![]() | ViewboxUnits | Gets or sets a value that specifies whether the Viewbox value is relative to the bounding box of the TileBrush contents or whether the value is absolute. |
![]() | Viewport | Gets or sets the position and dimensions of the base tile for a TileBrush. |
![]() | ViewportUnits | Gets or sets a BrushMappingMode enumeration that specifies whether the value of the Viewport, which indicates the size and position of the TileBrush base tile, is relative to the size of the output area. |
| Name | Description | |
|---|---|---|
![]() | ApplyAnimationClock(DependencyProperty, AnimationClock) | Applies an AnimationClock to the specified DependencyProperty. If the property is already animated, the SnapshotAndReplace handoff behavior is used. (Inherited from Animatable.) |
![]() | ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) | Applies an AnimationClock to the specified DependencyProperty. If the property is already animated, the specified HandoffBehavior is used. (Inherited from Animatable.) |
![]() | BeginAnimation(DependencyProperty, AnimationTimeline) | Applies an animation to the specified DependencyProperty. The animation is started when the next frame is rendered. If the specified property is already animated, the SnapshotAndReplace handoff behavior is used. (Inherited from Animatable.) |
![]() | BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) | Applies an animation to the specified DependencyProperty. The animation is started when the next frame is rendered. If the specified property is already animated, the specified HandoffBehavior is used. (Inherited from Animatable.) |
![]() | CheckAccess | Determines whether the calling thread has access to this DispatcherObject. (Inherited from DispatcherObject.) |
![]() | ClearValue(DependencyProperty) | Clears the local value of a property. The property to be cleared is specified by a DependencyProperty identifier. (Inherited from DependencyObject.) |
![]() | ClearValue(DependencyPropertyKey) | Clears the local value of a read-only property. The property to be cleared is specified by a DependencyPropertyKey. (Inherited from DependencyObject.) |
![]() | Clone | Creates a modifiable copy of this TileBrush by making deep copies of its values. |
![]() | CloneCore | Makes the instance a clone (deep copy) of the specified Freezable using base (non-animated) property values. (Inherited from Freezable.) |
![]() | CloneCurrentValue | Creates a modifiable copy of this TileBrush object by making deep copies of its values. This method does not copy resource references, data bindings, or animations, although it does copy their current values. |
![]() | CloneCurrentValueCore | Makes the instance a modifiable clone (deep copy) of the specified Freezable using current property values. (Inherited from Freezable.) |
![]() | CoerceValue | Coerces the value of the specified dependency property. This is accomplished by invoking any CoerceValueCallback function specified in property metadata for the dependency property as it exists on the calling DependencyObject. (Inherited from DependencyObject.) |
![]() | CreateInstance | Initializes a new instance of the Freezable class. (Inherited from Freezable.) |
![]() | CreateInstanceCore | When implemented in a derived class, creates a new instance of the Freezable derived class. (Inherited from Freezable.) |
![]() | Equals | Determines whether a provided DependencyObject is equivalent to the current DependencyObject. (Inherited from DependencyObject.) |
![]() | Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.) |
![]() | Freeze() | Makes the current object unmodifiable and sets its IsFrozen property to true. (Inherited from Freezable.) |
![]() | FreezeCore | Makes this Animatable object unmodifiable or determines whether it can be made unmodifiable. (Inherited from Animatable.) |
![]() | GetAnimationBaseValue | Returns the non-animated value of the specified DependencyProperty. (Inherited from Animatable.) |
![]() | GetAsFrozen | Creates a frozen copy of the Freezable, using base (non-animated) property values. Because the copy is frozen, any frozen sub-objects are copied by reference. (Inherited from Freezable.) |
![]() | GetAsFrozenCore | Makes the instance a frozen clone of the specified Freezable using base (non-animated) property values. (Inherited from Freezable.) |
![]() | GetContentBounds | Obtains the current bounds of the TileBrush content |
![]() | GetCurrentValueAsFrozen | Creates a frozen copy of the Freezable using current property values. Because the copy is frozen, any frozen sub-objects are copied by reference. (Inherited from Freezable.) |
![]() | GetCurrentValueAsFrozenCore | Makes the current instance a frozen clone of the specified Freezable. If the object has animated dependency properties, their current animated values are copied. (Inherited from Freezable.) |
![]() | GetHashCode | Gets a hash code for this DependencyObject. (Inherited from DependencyObject.) |
![]() | GetLocalValueEnumerator | Creates a specialized enumerator for determining which dependency properties have locally set values on this DependencyObject. (Inherited from DependencyObject.) |
![]() | GetType | Gets the Type of the current instance. (Inherited from Object.) |
![]() | GetValue | Returns the current effective value of a dependency property on this instance of a DependencyObject. (Inherited from DependencyObject.) |
![]() | InvalidateProperty | Re-evaluates the effective value for the specified dependency property (Inherited from DependencyObject.) |
![]() | MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) |
![]() | OnChanged | Called when the current Freezable object is modified. (Inherited from Freezable.) |
![]() | OnFreezablePropertyChanged(DependencyObject, DependencyObject) | Ensures that appropriate context pointers are established for a DependencyObjectType data member that has just been set. (Inherited from Freezable.) |
![]() | OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) | This member supports the Windows Presentation Foundation (WPF) infrastructure and is not intended to be used directly from your code. (Inherited from Freezable.) |
![]() | OnPropertyChanged | Overrides the DependencyObject implementation of OnPropertyChanged to also invoke any Changed handlers in response to a changing dependency property of type Freezable. (Inherited from Freezable.) |
![]() | ReadLocalValue | Returns the local value of a dependency property, if it exists. (Inherited from DependencyObject.) |
![]() | ReadPreamble | Ensures that the Freezable is being accessed from a valid thread. Inheritors of Freezable must call this method at the beginning of any API that reads data members that are not dependency properties. (Inherited from Freezable.) |
![]() | SetCurrentValue | Sets the value of a dependency property without changing its value source. (Inherited from DependencyObject.) |
![]() | SetValue(DependencyProperty, Object) | Sets the local value of a dependency property, specified by its dependency property identifier. (Inherited from DependencyObject.) |
![]() | SetValue(DependencyPropertyKey, Object) | Sets the local value of a read-only dependency property, specified by the DependencyPropertyKey identifier of the dependency property. (Inherited from DependencyObject.) |
![]() | ShouldSerializeProperty | Returns a value that indicates whether serialization processes should serialize the value for the provided dependency property. (Inherited from DependencyObject.) |
![]() | ToString() | Return string representation of this Brush. (Inherited from Brush.) |
![]() | ToString(IFormatProvider) | Creates a string representation of this object based on the specified culture-specific formatting information. (Inherited from Brush.) |
![]() | VerifyAccess | Enforces that the calling thread has access to this DispatcherObject. (Inherited from DispatcherObject.) |
![]() | WritePostscript | Raises the Changed event for the Freezable and invokes its OnChanged method. Classes that derive from Freezable should call this method at the end of any API that modifies class members that are not stored as dependency properties. (Inherited from Freezable.) |
![]() | WritePreamble | Verifies that the Freezable is not frozen and that it is being accessed from a valid threading context. Freezable inheritors should call this method at the beginning of any API that writes to data members that are not dependency properties. (Inherited from Freezable.) |
| Name | Description | |
|---|---|---|
![]() ![]() | AlignmentXProperty | Identifies the AlignmentX dependency property. |
![]() ![]() | AlignmentYProperty | Identifies the AlignmentY dependency property. |
![]() ![]() | StretchProperty | Identifies the Stretch dependency property. |
![]() ![]() | TileModeProperty | Identifies the TileMode dependency property. |
![]() ![]() | ViewboxProperty | Identifies the Viewbox dependency property. |
![]() ![]() | ViewboxUnitsProperty | Identifies the ViewboxUnits dependency property. |
![]() ![]() | ViewportProperty | Identifies the Viewport dependency property. |
![]() ![]() | ViewportUnitsProperty | Identifies the ViewportUnits dependency property. |
| Name | Description | |
|---|---|---|
![]() ![]() | IFormattable.ToString | Formats the value of the current instance using the specified format. (Inherited from Brush.) |
The derived classes of TileBrush define the contents of the tiles that you use to paint a region. For example, use the ImageBrush class to paint an area by using an image.
Use a TileBrush to control how you paint an area. For example, Windows Presentation Foundation (WPF) provides several types of brushes:
To paint by using an image, use the ImageBrush.
To paint by drawing, use the DrawingBrush.
To paint by using a Visual, use the VisualBrush.
When you use the TileBrush to paint an area, instead of painting an area by using a single stretched image, you can paint an area by using a series of image tiles that create a pattern.
When you paint an area by using a TileBrush, you use three components: content, tiles, and the output area. The following illustrations show how these three TileBrush components relate to each other.


Content: A TileBrush can have different types of content:
If the brush is an ImageBrush, this content is an image. The ImageSource property specifies the contents of the ImageBrush.
If the brush is a DrawingBrush, this content is a drawing. The Drawing property specifies the contents of the DrawingBrush.
If the brush is a VisualBrush, this content is a visual. The Visual property specifies the content of the VisualBrush.
You can specify the position and dimensions of TileBrush content by using the Viewbox property.
Tiles: A TileBrush produces one or more tiles. By default, the content of the brush is stretched to fill a single tile and that tile is stretched to fill the output area. The Viewport property is used to specify the size and position of the base tile for the TileBrush. The ViewportUnits property determines whether the size and position of the Viewport are relative to the output area (the default behavior) or whether they are absolute values.
Output Area: The output area is the area that the brush paints, such as the Fill of an Ellipse or the Background of a Button.
For more information about the TileBrush class, see Painting with Images, Drawings, and Visuals .
Freezable Features
A TileBrush is a Freezable type. For information about Freezable features, such as freezing and cloning, see the Freezable Objects Overview.
When you inherit from the TileBrush class, you must override the CreateInstanceCore method. For more information about inheriting from Freezable types, see the Freezable Objects Overview.
This example shows how to use the TileMode property of a TileBrush to create a pattern.
The TileMode property enables you to specify how the content of a TileBrush is repeated, that is, tiled to fill an output area. To create a pattern, you set the TileMode to Tile, FlipX, FlipY, or FlipXY. You must also set the Viewport of the TileBrush so that it is smaller than the area that you are painting; otherwise, only a single tile is produced, regardless which TileMode setting you use.
The following example creates five DrawingBrush objects, gives them each a different TileMode setting, and uses them to paint five rectangles. Although this example uses the DrawingBrush class to demonstrate TileMode behavior, the TileMode property works identically for all the TileBrush objects, that is, for ImageBrush, VisualBrush, and DrawingBrush.
The following illustration shows the output that this example produces.

using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace BrushesIntroduction { public class TileModeExample : Page { public TileModeExample() { Background = Brushes.White; Margin = new Thickness(20); StackPanel mainPanel = new StackPanel(); mainPanel.HorizontalAlignment = HorizontalAlignment.Left; // // Create a Drawing. This will be the DrawingBrushes' content. // PolyLineSegment triangleLinesSegment = new PolyLineSegment(); triangleLinesSegment.Points.Add(new Point(50, 0)); triangleLinesSegment.Points.Add(new Point(0, 50)); PathFigure triangleFigure = new PathFigure(); triangleFigure.IsClosed = true; triangleFigure.StartPoint = new Point(0, 0); triangleFigure.Segments.Add(triangleLinesSegment); PathGeometry triangleGeometry = new PathGeometry(); triangleGeometry.Figures.Add(triangleFigure); GeometryDrawing triangleDrawing = new GeometryDrawing(); triangleDrawing.Geometry = triangleGeometry; triangleDrawing.Brush = new SolidColorBrush(Color.FromArgb(255, 204, 204, 255)); Pen trianglePen = new Pen(Brushes.Black, 2); triangleDrawing.Pen = trianglePen; trianglePen.MiterLimit = 0; triangleDrawing.Freeze(); // // Create the first TileBrush. Its content is not tiled. // DrawingBrush tileBrushWithoutTiling = new DrawingBrush(); tileBrushWithoutTiling.Drawing = triangleDrawing; tileBrushWithoutTiling.TileMode = TileMode.None; // Create a rectangle and paint it with the DrawingBrush. Rectangle noTileExampleRectangle = createExampleRectangle(); noTileExampleRectangle.Fill = tileBrushWithoutTiling; // Add a header and the rectangle to the main panel. mainPanel.Children.Add(createExampleHeader("None")); mainPanel.Children.Add(noTileExampleRectangle); // // Create another TileBrush, this time with tiling. // DrawingBrush tileBrushWithTiling = new DrawingBrush(); tileBrushWithTiling.Drawing = triangleDrawing; tileBrushWithTiling.TileMode = TileMode.Tile; // Specify the brush's Viewport. Otherwise, // a single tile will be produced that fills // the entire output area and its TileMode will // have no effect. // This setting uses realtive values to // creates four tiles. tileBrushWithTiling.Viewport = new Rect(0, 0, 0.5, 0.5); // Create a rectangle and paint it with the DrawingBrush. Rectangle tilingExampleRectangle = createExampleRectangle(); tilingExampleRectangle.Fill = tileBrushWithTiling; mainPanel.Children.Add(createExampleHeader("Tile")); mainPanel.Children.Add(tilingExampleRectangle); // // Create a TileBrush with FlipX tiling. // The brush's content is flipped horizontally as it is // tiled in this example // DrawingBrush tileBrushWithFlipXTiling = new DrawingBrush(); tileBrushWithFlipXTiling.Drawing = triangleDrawing; tileBrushWithFlipXTiling.TileMode = TileMode.FlipX; // Specify the brush's Viewport. tileBrushWithFlipXTiling.Viewport = new Rect(0, 0, 0.5, 0.5); // Create a rectangle and paint it with the DrawingBrush. Rectangle flipXTilingExampleRectangle = createExampleRectangle(); flipXTilingExampleRectangle.Fill = tileBrushWithFlipXTiling; mainPanel.Children.Add(createExampleHeader("FlipX")); mainPanel.Children.Add(flipXTilingExampleRectangle); // // Create a TileBrush with FlipY tiling. // The brush's content is flipped vertically as it is // tiled in this example // DrawingBrush tileBrushWithFlipYTiling = new DrawingBrush(); tileBrushWithFlipYTiling.Drawing = triangleDrawing; tileBrushWithFlipYTiling.TileMode = TileMode.FlipX; // Specify the brush's Viewport. tileBrushWithFlipYTiling.Viewport = new Rect(0, 0, 0.5, 0.5); // Create a rectangle and paint it with the DrawingBrush. Rectangle flipYTilingExampleRectangle = createExampleRectangle(); flipYTilingExampleRectangle.Fill = tileBrushWithFlipYTiling; mainPanel.Children.Add(createExampleHeader("FlipY")); mainPanel.Children.Add(flipYTilingExampleRectangle); // // Create a TileBrush with FlipXY tiling. // The brush's content is flipped vertically as it is // tiled in this example // DrawingBrush tileBrushWithFlipXYTiling = new DrawingBrush(); tileBrushWithFlipXYTiling.Drawing = triangleDrawing; tileBrushWithFlipXYTiling.TileMode = TileMode.FlipXY; // Specify the brush's Viewport. tileBrushWithFlipXYTiling.Viewport = new Rect(0, 0, 0.5, 0.5); // Create a rectangle and paint it with the DrawingBrush. Rectangle flipXYTilingExampleRectangle = createExampleRectangle(); flipXYTilingExampleRectangle.Fill = tileBrushWithFlipXYTiling; mainPanel.Children.Add(createExampleHeader("FlipXY")); mainPanel.Children.Add(flipXYTilingExampleRectangle); Content = mainPanel; } // // Helper method that creates rectangle elements. // private static Rectangle createExampleRectangle() { Rectangle exampleRectangle = new Rectangle(); exampleRectangle.Width = 50; exampleRectangle.Height = 50; exampleRectangle.Stroke = Brushes.Black; exampleRectangle.StrokeThickness = 1; return exampleRectangle; } // // Helper method that creates headers for the examples. // private static TextBlock createExampleHeader(String text) { TextBlock header = new TextBlock(); header.Margin = new Thickness(0, 10, 0, 0); header.Text = text; return header; } } }
<!-- Demonstrates TileMode values. --> <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="PresentationOptions" Background="White" Margin="20"> <Page.Resources> <!-- Define a Drawing as a resource that it can be easily used as content for all the DrawingBrush objects in this example. --> <GeometryDrawing x:Key="TriangleDrawing" Geometry="M0,0 L50,0 0,50Z" Brush="#CCCCFF" PresentationOptions:Freeze="True" > <GeometryDrawing.Pen> <Pen Thickness="2" Brush="Black" MiterLimit="0" /> </GeometryDrawing.Pen> </GeometryDrawing> </Page.Resources> <StackPanel HorizontalAlignment="Left"> <TextBlock Margin="0,10,0,0">None</TextBlock> <Rectangle Width="50" Height="50" Stroke="Black" StrokeThickness="1"> <Rectangle.Fill> <!-- The DrawingBrush's content is not tiled in this example. --> <DrawingBrush TileMode="None" Drawing="{StaticResource TriangleDrawing}" /> </Rectangle.Fill> </Rectangle> <TextBlock Margin="0,10,0,0">Tile</TextBlock> <Rectangle Width="50" Height="50" Stroke="Black" StrokeThickness="1"> <Rectangle.Fill> <!-- The DrawingBrush's content is tiled in this example. The Viewport property is set to create four tiles. --> <DrawingBrush TileMode="Tile" Viewport="0,0,0.5,0.5" Drawing="{StaticResource TriangleDrawing}"/> </Rectangle.Fill> </Rectangle> <TextBlock Margin="0,10,0,0">FlipX</TextBlock> <Rectangle Width="50" Height="50" Stroke="Black" StrokeThickness="1"> <Rectangle.Fill> <!-- The DrawingBrush's content is flipped horizontally as it is tiled in this example. --> <DrawingBrush TileMode="FlipX" Viewport="0,0,0.5,0.5" Drawing="{StaticResource TriangleDrawing}" /> </Rectangle.Fill> </Rectangle> <TextBlock Margin="0,10,0,0">FlipY</TextBlock> <Rectangle Width="50" Height="50" Stroke="Black" StrokeThickness="1"> <Rectangle.Fill> <!-- The DrawingBrush's content is flipped vertically as it is tiled in this example. --> <DrawingBrush TileMode="FlipY" Viewport="0,0,0.5,0.5" Drawing="{StaticResource TriangleDrawing}" /> </Rectangle.Fill> </Rectangle> <TextBlock Margin="0,10,0,0">FlipXY</TextBlock> <Rectangle Width="50" Height="50" Stroke="Black" StrokeThickness="1"> <Rectangle.Fill> <!-- The DrawingBrush's content is flipped horizontally and vertically as it is tiled in this example. --> <DrawingBrush TileMode="FlipXY" Viewport="0,0,0.5,0.5" Drawing="{StaticResource TriangleDrawing}" /> </Rectangle.Fill> </Rectangle> </StackPanel> </Page>
More Code
| How to: Paint an Area with an Image | This example shows how to use the ImageBrush class to paint an area with an image. An ImageBrush displays a single image, which is specified by its ImageSource property. |
| How to: Preserve the Aspect Ratio of an Image Used as a Background | This example shows how to use the Stretch property of an ImageBrush in order to preserve the aspect ratio of the image. |
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.







