0

次のように OnRender-Method をオーバーライドする UserControl があります。

MyUsercontrol.cs:

MyUserControl: UserControl
{
    protected override void OnRender(DrawingContext dc)
    {
       dc.DrawRectangle(Brushes.White, new Pen(Brushes.Black,1), new Rect(0,10,50,30));

       var visualBrush = new VisualBrush(new UserControl1{Height=30, Width=50});           
       dc.DrawGeometry(visualBrush, null, new RectangleGeometry(new Rect(50,10,50,30)));           
    }
}

上記で使用されている UserControl は次のようになります (追加の分離コードなしで xaml で定義されています)。

<UserControl x:Class="VisualBrushExample.UserControl1" ...>
<Grid>
   <Border BorderThickness="1" BorderBrush="Black" Background="White" CornerRadius=8,0,0,8"/>
</Grid>
</UserControl>

MyUserControl を使用すると、次の出力が得られます。

MyUserControl で作成された出力の例

私の質問は、UserControl1-Rectangle の周りにこの透明な境界線を取得せずに、OnRender() メソッドで UserControl1 を使用する方法が存在するかどうかです。

よろしくお願いします、rhe1980

4

1 に答える 1

0

異なるサイズの長方形が表示される理由は単純です。ペンで四角形を描くと、ペンの線は四角形の端の中央に配置されます。つまり、端は線の中央にあります。したがって、ペンの幅の半分は、各方向の長方形の外側にあります。したがって、描画出力の合計サイズ、例では 51 x 31 を取得するには、長方形の幅と高さに 1 つのペン幅を追加する必要があります。

これはおそらくGeometry.GetRenderBoundsメソッドで確認できます。

于 2012-07-04T14:33:34.690 に答える