描画と塗りつぶし

Silverlight は、EllipseRectangleLinePolylinePolygon、および Path 要素を提供することで、ベクタグラフィックをサポートしています。 これらの要素を総称して、図形要素(shape elements)と呼びます。

このドキュメントは、以下のセクションで構成されます。

基本的な図形

Silverlight は、Ellipse(楕円)、Rectangle(長方形)、Line(線)という、3 つの基本的な図形要素を提供しています。

  • Ellipse 要素は、楕円や円をあらわします。Width プロパティによって水平方向の直径を指定でき、 Height プロパティによって垂直方向の直径を指定できます。
  • Rectangle 要素は、正方形や長方形をあらわし、角を丸くすることもできます。Width プロパティによって幅を指定でき、 Height プロパティによって高さを指定できます。また、RadiusXRadiusY プロパティを使って、角の丸みを制御できます。
  • Line の位置やサイズは、WidthHeight を使う代わりに、X1Y1X2Y2 プロパティを使って設定します。

以下の例は、Canvas において EllipseRectangleLine をひとつずつ描画します。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Ellipse Height="200" Width="200" Canvas.Left="30" Canvas.Top="30"
      Stroke="Black" StrokeThickness="10" Fill="SlateBlue"/>
  <Rectangle Height="100" Width="100" Canvas.Left="5" Canvas.Top="5"
      Stroke="Black" StrokeThickness="10" Fill="SlateBlue"/>
  <Line X1="280" Y1="10" X2="10" Y2="280"
      Stroke="black" StrokeThickness="5"/>
</Canvas>

その他の図形要素

EllipseLineRectangle 要素に加えて、Silverlight は、PolygonPolylinePath という 3 つの図形要素を提供しています。 Polygon は任意の数の辺をもつ閉じた図形であり、Polyline は、閉じた図形であるかどうかに関係ない連続した線をあらわします。 以下の例は、Polygon Polyline を作成しています。

<Canvas
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Polyline Points="150, 150 150, 250 250, 250 250, 150"
      Stroke="Black" StrokeThickness="10"/>
  <Polygon Points="10,10 10,110 110,110 110,10"
      Stroke="Black" StrokeThickness="10" Fill="LightBlue"/>
</Canvas>

Path 要素は、カーブや円弧を含む複雑な図形をあらわすためにも使われます。Path 要素を使うためには、特殊な属性の構文を使って Data プロパティを設定します。

<Canvas
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Path Data="M0,0 L11.5,0 11.5,30 5.75,40 0,30z"
      Stroke="Black" Fill="SlateBlue"
      Canvas.Left="10" Canvas.Top="10" />

  <Path Data="M 10,100 C 10,300 300,-200 250,100z"
      Stroke="Red" Fill="Orange"
      Canvas.Left="10" Canvas.Top="10" />
      
  <Path Data="M 0,200 L100,200 50,50z"
      Stroke="Black" Fill="Gray"
      Canvas.Left="150" Canvas.Top="70" />

  
</Canvas>

Path マークアップの構文に関する詳細は、Silverlight SDK の Path Markup Syntax をご覧ください。

ブラシを使った図形の塗りつぶし

ほとんどの図形は、ストローク(輪郭)とフィル(塗りつぶす領域)という 2 つの部分で構成されており、 これらは StrokeFill プロパティで制御できます。 以下の図は、最初の例における Rectangle のストロークとフィルにラベルをつけたものです。

すべての図形がフィルとストロークを持つわけではありません。Line はストロークだけを持ちます。 LineFill プロパティを設定しても、何も起きません。

StrokeFill にはブラシを設定できます。 使えるブラシには以下の種類があります。

  • SolidColorBrush
  • LinearGradientBrush
  • RadialGradientBrush
  • ImageBrush
  • VideoBrush (メディア で解説します)

SolidColorBrush を使って単色で塗りつぶす

領域を単色で塗りつぶすためには、SolidColorBrush を使います。 XAML は、SolidColorBrush を作成する方法はいくつかあります。

  • "Black""Gray" のような色の名前を指定する属性構文を使えます。
  • 色の3原色(赤、緑、青)の値や、場合によって透過率をあらわす16進表記を属性構文として使えます。 使える形式には以下のものがあります。
    • 6桁表記。#rrggbb という形式であり、rr は赤の値をあらわすための2桁の16進数、 同様に gg は緑の値、bb は青の値をあらわします。 たとえば、#0033FF と記述できます。
    • 8桁表記。6桁表記と同じですが、#aarrggbb という形式で、 アルファ値と呼ばれる透過率をあらわす2桁(aa)が追加されます。 たとえば、#990033FF と記述できます。
  • 要素構文を使って SolidColorBrush を明示的に作成し、 Color プロパティに割り当てることができます。

以下の例は、オブジェクトを黒に塗りつぶすいくつかの方法を示しています。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
  <Ellipse Height="90" Width="90" Canvas.Left="10" Canvas.Top="10"
      Fill="black"/> <!-- SolidColorBrush by color name. -->
      
  <Ellipse Height="90" Width="90" Canvas.Left="110" Canvas.Top="10"
      Fill="#000000"/> <!-- SolidColorBrush by 6-digit hexadecimal notation. -->
      
  <Ellipse Height="90" Width="90" Canvas.Left="10" Canvas.Top="110"
      Fill="#ff000000"/> <!-- SolidColorBrush by 8-digit hexadecimal notation. -->
      
  <Ellipse Height="90" Width="90" Canvas.Left="110" Canvas.Top="110">
    <Ellipse.Fill>
    
      <!-- SolidColorBrush by object element syntax. -->
      <SolidColorBrush Color="Black"/>
    </Ellipse.Fill>
  </Ellipse>
</Canvas>

LinearGradientBrush と RadialGradientBrush を使ったグラデーションによる塗りつぶし

Silverlight は、線状と放射状の両方のグラデーションをサポートしています。 グラデーションは、一つ以上のグラデーションの異なる色を記したグラデーション基準位置(gradient stop)を持ち、 その間を色が遷移します。 ほとんどのグラデーションは、2つの基準位置だけで十分ですが、必要に応じてたくさんの基準位置を追加できます。

  • LinearGradientBrush は、線状にグラデーションで塗りつぶします。 デフォルトでは、線は斜め方向になっており、塗りつぶすオブジェクトの左上隅から右下隅に向かって伸縮します。 StartPointEndPoint プロパティを使って、 線の基準位置を変更できます。
  • RadialGradientBrush は円に沿ってグラデーションで塗りつぶします。 デフォルトでは、円は描画するオブジェクトの中心に位置します。 GradientOriginCenterRadiusXRadiusY プロパティを設定することで、 グラデーションをカスタマイズできます。

グラデーションブラシに基準位置を追加するには、GradientStop オブジェクトを作成します。 GradientStopOffset プロパティを 0 から 1 の間に設定することで、グラデーションの相対的な位置を設定できます。 GradientStopColor は色の名前か16進値を指定します。

以下の例は、LinearGradientBrushRadialGradientBrush オブジェクトを使って、 4 つの Rectangle(長方形)オブジェクトを塗りつぶしています。

<Canvas
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  
  <!-- Linear gradients -->
  <Rectangle Width="140" Height="70" Canvas.Left="10" Canvas.Top="10">
    <Rectangle.Fill>
      <LinearGradientBrush>
        <GradientStop Color="Yellow" Offset="0.0" />
        <GradientStop Color="Red" Offset="0.25" />
        <GradientStop Color="Blue" Offset="0.75" />
        <GradientStop Color="LimeGreen" Offset="1.0" />
      </LinearGradientBrush>
    </Rectangle.Fill>
  </Rectangle>
  
  <Rectangle Width="140" Height="70" Canvas.Left="155" Canvas.Top="10">
    <Rectangle.Fill>
      <LinearGradientBrush  StartPoint="0,0" EndPoint="1,0">
        <GradientStop Color="Yellow" Offset="0.0" />
        <GradientStop Color="Red" Offset="0.25" />
        <GradientStop Color="Blue" Offset="0.75" />
        <GradientStop Color="LimeGreen" Offset="1.0" />
      </LinearGradientBrush>
    </Rectangle.Fill>
  </Rectangle>
  
  <!-- Radial gradients -->
  <Rectangle Width="140" Height="70" Canvas.Left="10" Canvas.Top="110">
    <Rectangle.Fill>
      <RadialGradientBrush>
        <GradientStop Color="Yellow" Offset="0.0" />
        <GradientStop Color="Red" Offset="0.25" />
        <GradientStop Color="Blue" Offset="0.75" />
        <GradientStop Color="LimeGreen" Offset="1.0" />
      </RadialGradientBrush>
    </Rectangle.Fill>
  </Rectangle>
  
  <Rectangle Width="140" Height="70" Canvas.Left="155" Canvas.Top="110">
    <Rectangle.Fill>
      <RadialGradientBrush GradientOrigin="1,0">
        <GradientStop Color="Yellow" Offset="0.0" />
        <GradientStop Color="Red" Offset="0.25" />
        <GradientStop Color="Blue" Offset="0.75" />
        <GradientStop Color="LimeGreen" Offset="1.0" />
      </RadialGradientBrush>
    </Rectangle.Fill>
  </Rectangle>
</Canvas>

図形の Stroke を塗りつぶすためにも、グラデーションが使えます。

以下の図は、前の例において最初の LinearGradientBrush のグラデーション基準位置を強調しています。

ImageBrush を使ってイメージで塗りつぶす

もうひとつのブラシが ImageBrush です。 デフォルトでは、イメージは図形全体に合わせて伸縮されますが、Stretch プロパティを使って ブラシがイメージをどのように扱うかを制御できます。 以下の例は、2 つの ImageBrush オブジェクトで Stretch を変えて 2 つの Rectangle を塗りつぶしています。

<Canvas Width="300" Height="300"
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Background="White">
  
  <Rectangle Height="180" Width="90" Canvas.Left="10" Canvas.Top="10"
      Stroke="Black" StrokeThickness="1">
    <Rectangle.Fill>
      <ImageBrush ImageSource="star.png"/>
    </Rectangle.Fill>
  </Rectangle>
  
  <Rectangle Height="180" Width="90" Canvas.Left="110" Canvas.Top="10"
      Stroke="Black" StrokeThickness="1">
    <Rectangle.Fill>
      <ImageBrush ImageSource="star.png" Stretch="Uniform"/>
    </Rectangle.Fill>
  </Rectangle>
</Canvas>

次のステップ

ほぼすべての UI 要素では、RenderTransform プロパティを使って図形を拡大したり、 回転したり、変形できます。 詳細な情報については、次のトピック、汎用的なグラフィックプロパティ をご覧ください。