WPF 路径和几何图形

原文 http://www.cnblogs.com/laoyang999/archive/2012/11/23/2783734.html

继承自Shap类的形状有:Rectangle、Ellipse、Polygon以及Polyline。这些类相对比较简单,还有一个继承自Shap类,并且功能最强大的类,即Path类。Path类可以包含任何简单形状、多组形状以及更复杂的要素,如曲线。

   Path类提供了一个Data属性,该属性接受一个Geometry对像,Geometry是一个抽像类,不能直接创建。而需要使用如下的某个派生类创建。

  1. LineGeometry:线
  2. RectangleGeometry:矩形
  3. EllipseGeometry:椭圆
  4. GeometryGroup:图形组
  5. CombinedGeometry:合并图形
  6. PathGeometry :代表一个更加复杂的图形
  7. 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。如果不希望图形封闭,就

可以不用这个命令

 

 

 

 

 

 

 

 

 

上面还有一些命令没说明,等后续研究。下面,做一个关闭按钮的例子,其中用到微语言路径。

效果如下图

WPF 路径和几何图形

上图中一个是正常状态,另一个是鼠标放上去时的状态

代码如下:

复制代码
<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>
复制代码

你可能感兴趣的:(WPF)