2011-10-29 13 views
0

私はビジュアルスタジオのwpfでキャンバスに図形を描いています。長方形の内側の右側に2つの小さな円を「追加」する(最良の)方法は何ですか?私はそれらをRectangle上の "小さな穴"としてユーザに見せたい。 Rectangleの右辺の座標を取得し、円の中心のそれぞれの要求される座標を計算することによって(私は円の描画のために四角形の中央の上下にしたい) Canvas GetRightは、Rectangleの右辺の座標を取得する適切なメソッドですか?コードに適用する方法:矩形に円を描く

shapeToRender = new Rectangle() { Fill = Brushes.Red, Height = 50, Width = 50, RadiusX = 10, RadiusY = 10 }; 

Canvas.SetLeft(shapeToRender, e.GetPosition(canvasDrawingArea).X - rectWidth/2); 
Canvas.SetTop(shapeToRender, e.GetPosition(canvasDrawingArea).Y - rectHeight/2); 

canvasDrawingArea.Children.Add(shapeToRender); 

シェイプは、MouseEnterイベントによって作成されます。

+1

最善の方法はありますか?計算を最小限に抑える方法や理解しやすい方法は? – AlexSavAlexandrov

答えて

3

これはあなたが行っているタイプですか? yourNsは、あなたが提供する名前空間です

<Grid x:Class="yourNs.RectangleWithCircles" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Height="50" Width="50"> 
    <Rectangle Fill="Red"/> 
    <UniformGrid Rows="2"> 
     <Ellipse Grid.Row="0" Fill="White" Height="10" Width="10" HorizontalAlignment="Right" VerticalAlignment="Center" /> 
     <Ellipse Grid.Row="1" Fill="White" Height="10" Width="10" HorizontalAlignment="Right" VerticalAlignment="Center" /> 
    </UniformGrid> 
</Grid> 

は、あなただけのキャンバスに<yourNs:RectangleWithCircles />を追加します。

enter image description here

この

を使用して行われます。

RectangleWithCirclesクラスを作成したので、たとえば、サークルを表示または非表示にするパブリックメソッドを追加して、必要に応じて簡単にカスタマイズできます。