<Window x:Class="Chapter05.VisualBrushExample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="VisualBrush Example" Height="190" Width="250">
<StackPanel Margin="5" Grid.Column="0">
<TextBlock Text="Original button:" Margin="5" />
<Button Name="Select" ToolTip="Select" Margin="5" Width="40" Height="40">
<Image Width="30" Height="30">
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<GeometryDrawing Brush="LightGray">
<GeometryDrawing.Geometry>
<PathGeometry
Figures="M250,75 L 50,10 75,75 60,75 20,100 40,100,40,75Z">
<PathGeometry.Transform>
RotateTransform
CenterX="50"
CenterY="50"
Angle="45"/>
</PathGeometry.Transform>
</PathGeometry>
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Brush="Gray" Thickness="3" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</Button>
<TextBlock Text="Copied button:" Margin="5" />
<Button Height="40" Width="40">
<Button.Background>
<VisualBrush Visual="{Binding ElementName=Select}" />
</Button.Background>
</Button>
</StackPanel>
</Window>
Windows Presentation Foundation
VisualBrush and TileMode
<Window x:Class="Chapter05.VisualBrushExample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="VisualBrush Example" Height="190" Width="250">
<StackPanel Margin="5" Grid.Column="0">
<TextBlock Text="Original button:" Margin="5" />
<Button Name="Select" ToolTip="Select" Margin="5" Width="40" Height="40">
<Image Width="30" Height="30">
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<GeometryDrawing Brush="LightGray">
<GeometryDrawing.Geometry>
<PathGeometry
Figures="M250,75 L 50,10 75,75 60,75 20,100 40,100,40,75Z">
<PathGeometry.Transform>
RotateTransform
CenterX="50"
CenterY="50"
Angle="45"/>
</PathGeometry.Transform>
</PathGeometry>
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Brush="Gray" Thickness="3" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</Button>
<TextBlock Text="Tiled button:" Margin="5" />
<Button Foreground="Blue" Height="120" Width="120">
<Button.Background>
<VisualBrush Visual="{Binding ElementName=Select}"
Viewport="0,0,40,40" ViewportUnits="Absolute" TileMode="Tile">
</VisualBrush>
</Button.Background>
</Button>
</StackPanel>
</Window>
Create buttons using DrawingImage objects
<Window x:Class="Chapter05.DrawingImageExample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DrawingImage Example" Height="130" Width="320">
<Button Name="Select" ToolTip="Select" Margin="5">
<Image Width="80" Height="80">
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<GeometryDrawing Brush="LightGray">
<GeometryDrawing.Geometry>
<PathGeometry
Figures="M25,75 L 50,0 75,75 60,75 60,100 40,100,40,75Z">
<PathGeometry.Transform>
<RotateTransform CenterX="50" CenterY="50" Angle="45" />
</PathGeometry.Transform>
</PathGeometry>
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Brush="Gray" Thickness="3" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</Button>
</Window>
Applies a DrawingBrush and DrawingGroup to draw gridlines as a background of a Grid control.
<Window x:Class="DrawingBrushGridline"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Drawing Brush - Gridline" Height="300" Width="300">
<Grid>
<Grid.Background>
<DrawingBrush Viewport="0,0,50,50" ViewportUnits="Absolute"
TileMode="Tile">
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Geometry="M0,0 L50,0">
<GeometryDrawing.Pen>
<Pen Thickness="2"
Brush="LightGreen" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Geometry="M0,10 L50,10">
<GeometryDrawing.Pen>
<Pen Thickness="1"
Brush="LightGreen" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Geometry="M0,20 L50,20">
<GeometryDrawing.Pen>
<Pen Thickness="1"
Brush="LightGreen" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Geometry="M0,30 L50,30">
<GeometryDrawing.Pen>
<Pen Thickness="1"
Brush="LightGreen" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Geometry="M0,40 L50,40">
<GeometryDrawing.Pen>
<Pen Thickness="1"
Brush="LightGreen" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Geometry="M0,0 L0,50">
<GeometryDrawing.Pen>
<Pen Thickness="2"
Brush="LightGreen" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Geometry="M10,0 L10,50">
<GeometryDrawing.Pen>
<Pen Thickness="1"
Brush="LightGreen" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Geometry="M20,0 L20,50">
<GeometryDrawing.Pen>
<Pen Thickness="1"
Brush="LightGreen" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Geometry="M30,0 L30,50">
<GeometryDrawing.Pen>
<Pen Thickness="1"
Brush="LightGreen" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Geometry="M40,0 L40,50">
<GeometryDrawing.Pen>
<Pen Thickness="1"
Brush="LightGreen" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Grid.Background>
</Grid>
</Window>
Create buttons using DrawingImage and GeometryDrawing
<Window x:Class="Chapter05.DrawingImageExample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DrawingImage Example" Height="130" Width="320">
<Button Name="DrawRectangle" Grid.Column="1"
ToolTip="Draw Rectangle" Margin="5">
<Image Width="80" Height="80">
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<GeometryDrawing Brush="LightGray">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0,20,100,60" />
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Brush="Gray" Thickness="3" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</Button>
</Window>
Draw text to the background of a control by accessing the control's DrawingContext.
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Draw Text to a Control's Background"
Background="FloralWhite"
Width="800"
Loaded="WindowLoaded">
<StackPanel>
<Label Name="myLabel" Width="200" Height="36" />
<TextBox Name="myTextBox" MaxLength="25" >Sample Text</TextBox>
<Button Name="myButton" Click="OnButtonClick" Width="160" Height="40" />
<Canvas Name="myCanvas" Width ="760" Height="300"/>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Media;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1() : base()
{
InitializeComponent();
}
private void WindowLoaded(object sender, EventArgs e)
{
myLabel.Background = new DrawingBrush(DrawMyText("My Custom Label"));
myButton.Background = new DrawingBrush(DrawMyText("Display Text"));
}
private Drawing DrawMyText(string textString)
{
DrawingGroup drawingGroup = new DrawingGroup();
using (DrawingContext drawingContext = drawingGroup.Open())
{
FormattedText formattedText = new FormattedText(
textString,
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface("Comic Sans MS Bold"),
48,
Brushes.Black
);
Geometry textGeometry = formattedText.BuildGeometry(new Point(20, 0));
drawingContext.DrawRoundedRectangle(Brushes.PapayaWhip, null, new Rect(new Size(formattedText.Width + 50, formattedText.Height + 5)), 5.0, 5.0);
drawingContext.DrawGeometry(Brushes.Gold, new Pen(Brushes.Maroon, 1.5), textGeometry);
return drawingGroup;
}
}
public void OnButtonClick(object sender, EventArgs e)
{
myCanvas.Background = new DrawingBrush(DrawMyText(myTextBox.Text));
}
}
}
DrawingGroup and GeometryGroup
<Window x:Class="Workspace.DockExample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Workspace" Width="640" Height="480">
<Window.Resources>
<DrawingGroup x:Key="myDrawing" >
<GeometryDrawing>
<GeometryDrawing.Geometry>
<GeometryGroup>
<LineGeometry StartPoint="0,0" EndPoint="1,1" />
<LineGeometry StartPoint="0,1" EndPoint="1,0" />
</GeometryGroup>
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Thickness="0.2" Brush="#3366FF" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Brush="Red"
Geometry="M 0.4,0.4 L 0.5,0.2 0.6,0.4 0.5,0.5" />
</DrawingGroup>
</Window.Resources>
<Rectangle Width="175" Height="90" Stroke="Black">
<Rectangle.Fill>
<DrawingBrush Drawing="{StaticResource myDrawing}" Viewport="0,0,0.5,0.5" TileMode="Tile">
<DrawingBrush.RelativeTransform>
<RotateTransform CenterX="0.5" CenterY="0.5" Angle="45" />
</DrawingBrush.RelativeTransform>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
</Window>