路径和几何图形

    继承自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。如果不希望图形封闭,就

可以不用这个命令

 

 

 

 

 

 

 

 

 

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

效果如下图

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

代码如下:

View Code
<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>

 

posted on 2012-11-23 01:09  老杨999  阅读(1578)  评论(1编辑  收藏  举报

导航