Shapes形状

  • 文件结构:

clipboard.png

  • FillRuleExample

Polygon.FillRule:该枚举指定如何确定形状的内部填充。

clipboard.png

<Polygon
    Points="10,100 50,0 90,100 0,35 100,35"
    Fill="Gold"
    Stroke="Black"
    StrokeThickness="3"
    FillRule="EvenOdd"
    Canvas.Left="150"
    Canvas.Top="20" />

扩展:

  1. EvenOdd:此规则确定一个点是否位于填充区域内,具体方法是从该点沿任意方向画一条无限长的射线,然后计算该射线在给定形状中因交叉而形成的路径段数。 如果该数为奇数,则点在内部;如果为偶数,则点在外部。

例:

<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
  <Path.Data>
    <GeometryGroup FillRule="EvenOdd">
      <EllipseGeometry RadiusX="50" RadiusY="50" Center="75,75" />
      <EllipseGeometry RadiusX="70" RadiusY="70" Center="75,75" />
      <EllipseGeometry RadiusX="100" RadiusY="100" Center="75,75" />
      <EllipseGeometry RadiusX="120" RadiusY="120" Center="75,75" />
    </GeometryGroup>
  </Path.Data>
</Path>

clipboard.png
扩展:

  1. NonZero:此规则确定一个点是否位于路径的填充区域内,具体方法是从该点沿任意方向画一条无限长的射线,然后检查形状段与射线的交点。 从零开始计数,每当线段从左向右穿过该射线时加 1,而每当路径段从右向左穿过该射线时减 1。 计算交点的数目后,如果结果为零,则说明该点位于路径外部。 否则,它位于路径内部。

例:

clipboard.png

  • LinecapsAndJoinsExample

Shape.StrokeLineJoin:指定在 Shape 的顶点处使用的联接类型。如果在没有顶点的元素(如 Line 元素)上设置此属性,则此属性不起作用。
clipboard.png

<Polyline
    Points="50,50 75,30 100,100 130,40"
    Stroke="Red"
    StrokeThickness="20"
    StrokeLineJoin="Bevel"
    Grid.Row="2" Grid.Column="1"/>

Shape.StrokeStartLineCap、StrokeEndLineCap
如果在没有 Stroke 或没有起点或终点的形状上设置此属性,则此属性不起作用。 例如,如果在 Ellipse 上设置此属性,则此属性不起作用。

<Polyline
    Points="50,50 75,30 100,100 130,40"
    Stroke="Red"
    StrokeThickness="20"
    StrokeStartLineCap="Round"
    StrokeEndLineCap="Round"  
    Grid.Row="3" Grid.Column="4"/>
  • MiterLimitExample

Shape.StrokeMiterLimit:对斜接长度与 Shape 元素的 StrokeThickness 的一半之比的限制。
斜接通过使两条连接线条的末端倾斜来构成角部。 当两条线段形成锐角时,斜接可能会延伸到绘制路径的线条宽度之外。

clipboard.png

<!-- The corner is cut off (beveled) because the miter limit
     is set to 1.-->
<Polyline
  Points="0,10 50,10 20,35"
  Stroke="#9999CC"
  StrokeThickness="20"
  StrokeMiterLimit="2"
  Canvas.Top="30"
  Canvas.Left="250"/>
  • Plygon:多边形

此对象与 Polyline 对象类似,不同的是,此对象必须是闭合的形状。

clipboard.png

<Canvas Height="350" Width="350">
  
    <Polygon Name="hexagon"
      Stroke="Blue"
      StrokeThickness="2.0"
      Points="176,30 302.44,103 302.44,249 176,322 49.5603,249 49.5603,103">
      <Polygon.Fill>
        <RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
          <RadialGradientBrush.GradientStops>
            <GradientStop Color="Red" Offset="0" />
            <GradientStop Color="Gold" Offset="0.75" />
          </RadialGradientBrush.GradientStops>
        </RadialGradientBrush>
      </Polygon.Fill>
    </Polygon>
   
    <Polygon Name="star" 
      Stroke="Blue" 
      Fill="LightCoral" 
      StrokeThickness="2.0" 
      Points="176.5,50 189.2,155.003 286.485,113.5 201.9,177 286.485,240.5 
      189.2,198.997 176.5,304 163.8,198.997 66.5148,240.5 151.1,177 
      66.5148,113.5 163.8,155.003" />
  </Canvas>
  • RectangleExample

矩形圆角为:可选的 RadiusX 和 RadiusY 属性
ps:在为 Grid 面板的某些部分提供背景时矩形特别有用。

clipboard.png

  • StretchExamplet填充效果

描述形状如何填充为它分配的空间。
clipboard.png

<Border Grid.Row="5" Grid.Column="2" Style="{StaticResource MyGridBorderStyle}" HorizontalAlignment="Left">
        <Canvas Height="200" Width="200">
          <Border Height="100" Width="50" Canvas.Top="50" Canvas.Left="70"   
                  BorderBrush="Black" BorderThickness="1" >
            <Polygon Height="100" Width="50" Points="0,0 10,10 0,10" Fill="Blue" Stretch="UniformToFill"/>
           </Border>
        </Canvas>
</Border>

李志玮
22 声望34 粉丝

求索~~


引用和评论

0 条评论