Shape は View の一種であり、これを使用すると、画面に図形を描画できます。 Shape クラスは View クラスから派生しているため、Shape オブジェクトはレイアウト クラスおよびほとんどのコントロール内で使用できます。
Xamarin.Forms 図形は、iOS、Android、macOS、ユニバーサル Windows プラットフォーム (UWP)、および Windows Presentation Foundation (WPF) の Xamarin.Forms.Shapes 名前空間で使用できます。
Shape には、次のプロパティが定義されています。
Stretch型のAspectは、図形の割り当てられた領域を塗りつぶす方法を表します。 このプロパティの既定値はStretch.Noneです。Brush型のFillは、図形の内部のペイントに使用するブラシを示します。Brush型のStrokeは、図形の輪郭のペイントに使用するブラシを示します。DoubleCollection型のStrokeDashArrayは、図形の輪郭を描くために使用されるダッシュとギャップのパターンを示すdouble値のコレクションを表します。double型のStrokeDashOffsetは、ダッシュの開始位置となる、ダッシュ パターン内の距離を指定します。 このプロパティの既定値は 0.0 です。PenLineCap型のStrokeLineCapは、線またはセグメントの始点と終点の図形を表します。 このプロパティの既定値はPenLineCap.Flatです。PenLineJoin型のStrokeLineJoinは、図形の頂点で使用される結合の種類を指定します。 このプロパティの既定値はPenLineJoin.Miterです。double型のStrokeMiterLimitは、図形のStrokeThicknessの半分に対するマイター長の比率の制限を指定します。 このプロパティの既定値は 10.0 です。double型のStrokeThicknessは、図形のアウトラインの幅を示します。 このプロパティの既定値は 1.0 です。
これらのプロパティは、BindableProperty オブジェクトが基になっています。つまり、これらは、データ バインディングの対象にすることができ、スタイルを設定できます。
Xamarin.Forms は、Shape クラスから派生する多数のオブジェクトを定義します。 これらは、Ellipse、Line、Path、Polygon、Polyline、および Rectangle です。
図形のペイント
Brush オブジェクトは、図形の Stroke と Fill をペイントするために使用します。
<Ellipse Fill="DarkBlue"
Stroke="Red"
StrokeThickness="4"
WidthRequest="150"
HeightRequest="50"
HorizontalOptions="Start" />
次の例では、Ellipse のストロークと塗りつぶしを指定しています。

重要
Brush オブジェクトは、Color 値を Stroke プロパティに指定できるようにする型コンバーターを使用します。
Stroke に Brush オブジェクトを指定しない場合、または StrokeThickness を 0 に設定した場合、図形の周囲の境界線は描画されません。
Brush の詳細については、「Xamarin.Forms ブラシ」を参照してください。 有効な Color 値の詳細については、「Xamarin.Forms の 色」を参照してください。
図形の伸縮
Shape オブジェクトには、Stretch 型の Aspect プロパティがあります。 このプロパティは、Shape オブジェクトのコンテンツをどのように引き伸ばし、Shape オブジェクトのレイアウト空間を埋めるかを決定します。 Shape オブジェクトのレイアウト空間とは、Xamarin.Forms レイアウト システムによって Shape に割り当てられる空間の大きさであり、WidthRequest と HeightRequest の明示的な設定または HorizontalOptions と VerticalOptions の設定によって決まります。
Stretch 列挙型には、次のメンバーが定義されています。
Noneは、コンテンツが元のサイズを保持することを示します。 これは、Shape.Aspectプロパティの既定値です。Fillは、割り当てられた広さを埋めるようにコンテンツのサイズを変更することを示します。 縦横比は維持されません。Uniformは、縦横比を維持しながら、コンテンツのサイズが移動先の寸法に合わせて変更されることを示します。UniformToFillは、縦横比を維持しながら、割り当てられた広さに収まるようにコンテンツのサイズを変更することを示します。 ソース コンテンツの縦横比が対象の四角形の縦横比と異なる場合は、ソース コンテンツが対象の四角形に収まるように切り取られます。
次の XAML では、Aspect プロパティを設定する方法を示しています。
<Path Aspect="Uniform"
Stroke="Yellow"
Fill="Red"
BackgroundColor="LightGray"
HorizontalOptions="Start"
HeightRequest="100"
WidthRequest="100">
<Path.Data>
<!-- Path data goes here -->
</Path.Data>
</Path>
この例では、Path オブジェクトがハートを描画します。 Path オブジェクトの WidthRequest プロパティと HeightRequest プロパティはデバイスに依存しない 100 単位に設定され、その Aspect プロパティは Uniform に設定されます。 その結果、オブジェクトの内容は、縦横比を維持しながら、コピー先の寸法に合わせてサイズが変更されます。

破線の図形を描画する
Shape オブジェクトには、DoubleCollection 型の StrokeDashArray プロパティがあります。 このプロパティは、図形の輪郭を描くために使用されるダッシュとギャップのパターンを示す double 値のコレクションを表します。 DoubleCollection は double 値の ObservableCollection です。 コレクション内の各 double 要素は、ダッシュやギャップの長さを指定します。 インデックス 0 にあるコレクション内の最初の項目は、ダッシュの長さを指定します。 インデックス 1 にあるコレクション内の 2 番目の項目は、ギャップの長さを指定します。 したがって、偶数インデックス値を持つオブジェクトはダッシュを指定し、奇数のインデックス値を持つオブジェクトはギャップを指定します。
Shape オブジェクトには、ダッシュが始まるダッシュ パターン内の距離を指定する StrokeDashOffset プロパティ (double 型) もあります。 このプロパティを設定しないと、 Shape の輪郭が塗りつぶされます。
破線の図形は、StrokeDashArray と StrokeDashOffset プロパティの両方を設定することで描画できます。 StrokeDashArray プロパティは 1 つ以上 の double 値に設定し、各ペアを 1 つのコンマまたは 1 つ以上のスペースで区切る必要があります。 たとえば、"0.5 1.0" と "0.5,1.0" はどちらも有効です。
次の XAML の例は、破線の四角形を描画する方法を示しています。
<Rectangle Fill="DarkBlue"
Stroke="Red"
StrokeThickness="4"
StrokeDashArray="1,1"
StrokeDashOffset="6"
WidthRequest="150"
HeightRequest="50"
HorizontalOptions="Start" />
この例では、破線のストロークで塗りつぶされた四角形が描画されます。

線分の端部の制御
線分には、始点、ラインボディ、終点の 3 つの部分があります。 始点と終点は、線分やセグメントの始点と終点の形状を表します。
Shape オブジェクトには、線分やセグメントの始点と終点の形状を表す StrokeLineCap プロパティ (PenLineCap 型) があります。 PenLineCap 列挙型には、次のメンバーが定義されています。
Flatは、線分の終点を越えない端を表します。 これは、線分の端がないことに相当し、StrokeLineCapプロパティの既定値です。Squareは、高さが線の太さに等しく、長さが線の太さの半分に等しい長方形を表します。Roundは、直径が線分の太さに等しい半円を表します。
重要
始点や終点のない図形に設定した場合、StrokeLineCap プロパティは無効になります。 たとえば、このプロパティを Ellipse または Rectangle に設定すると、無効になります。
次の XAML では、StrokeLineCap プロパティを設定する方法を示しています。
<Line X1="0"
Y1="20"
X2="300"
Y2="20"
StrokeLineCap="Round"
Stroke="Red"
StrokeThickness="12" />
この例では、赤い線は始点と終点が丸くなっています。

線分の結合点の制御
Shape オブジェクトには、図形の頂点で使用する結合点の種類を指定する StrokeLineJoin プロパティ (PenLineJoin 型) があります。 PenLineJoin 列挙型には、次のメンバーが定義されています。
Miterは、標準の角度頂点を表します。 これは、StrokeLineJoinプロパティの既定値です。Bevelは、面取りした頂点を表します。Roundは、丸い頂点を表します。
Note
StrokeLineJoin プロパティが Miter に設定されている場合、StrokeMiterLimit プロパティを double に設定して、図形内の線分の結合点のマイターの長さを制限できます。
次の XAML では、StrokeLineJoin プロパティを設定する方法を示しています。
<Polyline Points="20 20,250 50,20 120"
Stroke="DarkBlue"
StrokeThickness="20"
StrokeLineJoin="Round" />
この例では、濃い青色のポリラインの頂点で結合点が丸いです。
