<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="WpfApplication1.Window1" Title="Using a Path Geometry to Highlight Text" Background="PowderBlue"> <StackPanel> <Button Margin="10" Grid.Column="2" Grid.Row="0" FontSize="16" Click="OnDisplayTextClick">Display Text</Button> <Canvas Margin="20" Height="150"> <Path Canvas.Top="15" Canvas.Left="15" Stroke="SteelBlue" StrokeThickness="3" Fill="LightSteelBlue" Name="path" /> <Ellipse Canvas.Top="0" Canvas.Left="0" Width="30" Height="30"> <Ellipse.Fill> <RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5"> <RadialGradientBrush.GradientStops> <GradientStop Color="Yellow" Offset="0.25" /> <GradientStop Color="Transparent" Offset="1" /> </RadialGradientBrush.GradientStops> </RadialGradientBrush> </Ellipse.Fill> <Ellipse.RenderTransform> <MatrixTransform /> </Ellipse.RenderTransform> <Ellipse.Triggers> <EventTrigger RoutedEvent="FrameworkElement.Loaded"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard x:Name="storyboard"> <MatrixAnimationUsingPath x:Name="matrixAnimation" Duration="0:00:40" RepeatBehavior="Forever" Storyboard.TargetProperty="RenderTransform.Matrix" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </Ellipse.Triggers> </Ellipse> </Canvas> </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() { InitializeComponent(); } public void OnDisplayTextClick(object sender, EventArgs e) { FormattedText formattedText = new FormattedText( "asdf", CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 96, Brushes.Black); formattedText.SetFontWeight(FontWeights.Bold); Geometry geometry = formattedText.BuildGeometry(new Point(0, 0)); PathGeometry pathGeometry = geometry.GetFlattenedPathGeometry(); path.Data = pathGeometry; matrixAnimation.PathGeometry = pathGeometry; } } }