Path with Shadow


   
  

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:src="clr-namespace:MyNameSpace.TextGeometryDemo" 
        Title="TextGeometry Demo">
    <Window.Resources>
        <src:TextGeometry x:Key="txtHollow" Text="Hollow"
                          FontFamily="Times New Roman" 
                          FontSize="192" FontWeight="Bold" />
        
        <src:TextGeometry x:Key="txtShadow" Text="Shadow"
                          FontFamily="Times New Roman"
                          FontSize="192" FontWeight="Bold" />
    </Window.Resources>

    <TabControl>
        <TabItem Header="Shadow">
            <Canvas>
                <Path Fill="DarkGray"
                      Data="{Binding Source={StaticResource txtShadow},Path=Geometry}"
                      Canvas.Left="12" Canvas.Top="12" />
                <Path Stroke="Black" Fill="White" 
                      Data="{Binding Source={StaticResource txtShadow},Path=Geometry}" />
            </Canvas>
        </TabItem>


    </TabControl>
</Window>
//File:Window.xaml.cs
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Media;

namespace MyNameSpace.TextGeometryDemo
{
    public class TextGeometry
    {
        string txt = "";
        FontFamily fntfam = new FontFamily();
        FontStyle fntstyle = FontStyles.Normal;
        FontWeight fntwt = FontWeights.Normal;
        FontStretch fntstr = FontStretches.Normal;
        double emsize = 24;
        Point ptOrigin = new Point(0, 0);

        public string Text
        {
            set { txt = value; }
            get { return txt; }
        }
        public FontFamily FontFamily
        {
            set { fntfam = value; }
            get { return fntfam; }
        }
        public FontStyle FontStyle
        {
            set { fntstyle = value; }
            get { return fntstyle; }
        }
        public FontWeight FontWeight
        {
            set { fntwt = value; }
            get { return fntwt; }
        }
        public FontStretch FontStretch
        {
            set { fntstr = value; }
            get { return fntstr; }
        }
        public double FontSize
        {
            set { emsize = value; }
            get { return emsize; }
        }
        public Point Origin
        {
            set { ptOrigin = value; }
            get { return ptOrigin; }
        }

        public Geometry Geometry
        {
            get
            {
                FormattedText formtxt = new FormattedText(Text, CultureInfo.CurrentCulture, 
                                      FlowDirection.LeftToRight,
                                      new Typeface(FontFamily, FontStyle,FontWeight, FontStretch), 
                                      FontSize, Brushes.Black);

                return formtxt.BuildGeometry(Origin);
            }
        }

        public PathGeometry PathGeometry
        {
            get
            {
                return PathGeometry.CreateFromGeometry(Geometry);
            }
        }

    }
}

   
    
     


Path Margin as resource


   
      

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      HorizontalAlignment="Center" VerticalAlignment="Center">

        <StackPanel Orientation="Horizontal">
          <StackPanel.Resources>
            <Style TargetType="Path">
              <Setter Property="Margin" Value="5" />
            </Style>
          </StackPanel.Resources>
        <Path Fill="Cyan" Stroke="Black">
          <Path.Data>
            <PathGeometry>
              <PathGeometry.Figures>
                <PathFigure StartPoint="0,0" IsClosed="True">
                  <LineSegment Point="50,0" />
                  <LineSegment Point="50,50" />
                  <LineSegment Point="0,50" />
                </PathFigure>
              </PathGeometry.Figures>
            </PathGeometry>
          </Path.Data>
        </Path>


        </StackPanel>

</Page>

   
    
    
    
    
    
     


Path.Data with LineSegment


   
      

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      HorizontalAlignment="Center" VerticalAlignment="Center">

        <StackPanel Orientation="Horizontal">
          <StackPanel.Resources>
            <Style TargetType="Path">
              <Setter Property="Margin" Value="5" />
            </Style>
          </StackPanel.Resources>
        <Path Fill="Cyan" Stroke="Black">
          <Path.Data>
            <PathGeometry>
              <PathGeometry.Figures>
                <PathFigure StartPoint="0,0" IsClosed="True">
                  <LineSegment Point="50,0" />
                  <LineSegment Point="50,50" />
                  <LineSegment Point="0,50" />
                </PathFigure>
              </PathGeometry.Figures>
            </PathGeometry>
          </Path.Data>
        </Path>


        </StackPanel>

</Page>

   
    
    
    
    
    
     


Combined geometries GeometryCombineMode=Exclude


   
      

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      HorizontalAlignment="Center" VerticalAlignment="Center">

        <Path Fill="Cyan" Stroke="Black">
          <Path.Data>  
            <CombinedGeometry GeometryCombineMode="Exclude">
              <CombinedGeometry.Geometry1>
                <RectangleGeometry Rect="0,0,50,50" />
              </CombinedGeometry.Geometry1>
              <CombinedGeometry.Geometry2>
                <EllipseGeometry Center="50,25" RadiusX="30" RadiusY="10" />
              </CombinedGeometry.Geometry2>
            </CombinedGeometry>
          </Path.Data>
        </Path>


</Page>

   
    
    
    
    
    
     


Multiple geometries


   
      
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      HorizontalAlignment="Center" VerticalAlignment="Center">


        <Path Fill="Cyan" Stroke="Black">
          <Path.Data>
            <GeometryGroup>
              <RectangleGeometry Rect="0,0,550,50" />
              <EllipseGeometry Center="500,250" RadiusX="30" RadiusY="10" />
            </GeometryGroup>
          </Path.Data>
        </Path>


</Page>

   
    
    
    
    
    
     


PolyBezierSegment Demo


   
      

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      HorizontalAlignment="Stretch" VerticalAlignment="Stretch">

        <Path Stroke="Black">
          <Path.Data>
            <PathGeometry>
        
                <PathFigure StartPoint="0,0">
                  <PolyBezierSegment>
                    <PolyBezierSegment.Points>
                      <Point X="10" Y="10"/>
                      <Point X="20" Y="120"/>
                      <Point X="40" Y="130"/>
                      <Point X="160" Y="1210"/>
                      <Point X="120" Y="315"/>
                      <Point X="100" Y="540"/>
                    </PolyBezierSegment.Points>
                  </PolyBezierSegment>
                </PathFigure>
        
            </PathGeometry>
          </Path.Data>
        </Path>

</Page>