原文 http://www.cnblogs.com/laoyang999/archive/2012/11/23/2783734.html
继承自Shap类的形状有:Rectangle、Ellipse、Polygon以及Polyline。这些类相对比较简单,还有一个继承自Shap类,并且功能最强大的类,即Path类。Path类可以包含任何简单形状、多组形状以及更复杂的要素,如曲线。
Path类提供了一个Data属性,该属性接受一个Geometry对像,Geometry是一个抽像类,不能直接创建。而需要使用如下的某个派生类创建。
- LineGeometry:线
- RectangleGeometry:矩形
- EllipseGeometry:椭圆
- GeometryGroup:图形组
- CombinedGeometry:合并图形
- PathGeometry :代表一个更加复杂的图形
- StreamGeometry :相当于PathGeometry的轻量级的类。该类可以节省内存,一旦创建就不能再修改。
图形微语言
WPF创作人员为定义几何图形增加了一个更简明的替换语法,通过该语法可以用更少的标记表示详细的图形。这种语法通常称为图形微语言,也可以称为微路径语言。
通常的写法如下示例:
<path Data="M 0 0 L10 10"/>
微语言路径命令如下表:
名称 | 说明 |
M x,y | 为几何图形创建一个新的PathFigure,并设置起点。该命令必须在其他命令使用之前, 也可以在绘制序列期间使用该命令移动坐标系统的原点(M代表Move) |
L x,y | 创建一条到指定点的LineSegment |
H x | 使用x值创建一条水平线 |
V y | 使用y值创建一条垂直线 |
Z | 用于结束当前的PathFigure对象。并将IsClosed属性设置为Ture。如果不希望图形封闭,就 可以不用这个命令 |
上面还有一些命令没说明,等后续研究。下面,做一个关闭按钮的例子,其中用到微语言路径。
效果如下图
上图中一个是正常状态,另一个是鼠标放上去时的状态
代码如下:
<Button Width="15" Height="15" RenderTransformOrigin="-11,-5.9" HorizontalAlignment="Left" Margin="100,213,0,0" VerticalAlignment="Top"> <Button.Template> <ControlTemplate TargetType="{x:Type Button}"> <Grid x:Name="closeGD" Background="LightGray"> <Rectangle Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" RadiusX="2" RadiusY="2" Stroke="Black" StrokeThickness="1"> </Rectangle> <Rectangle Margin="3.5"> <Rectangle.Fill> <VisualBrush> <VisualBrush.Visual> <Path x:Name="closePath" Stroke="Blue" StrokeThickness="2" Data="M0 0L10 10 M10,0L0 10 "/> </VisualBrush.Visual> </VisualBrush> </Rectangle.Fill> </Rectangle> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="closePath" Property="Stroke" Value="Red"/> </Trigger> <Trigger Property="IsPressed" Value="True"> <Setter TargetName="closeGD" Property="Background" Value="White"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Button.Template> </Button>