web-dev-qa-db-ja.com

WPFで角が丸い破線の境界線を作成するにはどうすればよいですか?

Rectangle要素にはStrokeDashArrayがあり、ダッシュで描画できますが、角の丸みはサポートされていません。 Borderコントロールは、角が丸い素敵な太い線をサポートしますが、実線のみを描画します。

任意のコントロールを使用して、角が丸い破線の境界線を実現するための最良の方法は何ですか?

破線の境界線の例http://img524.imageshack.us/img524/3186/dashedborder.png

30
GraemeF

Rectangleがこれをサポートしていないと誤解されています:

<Rectangle StrokeDashArray="0.5 1.0 0.3" Stroke="Black" StrokeThickness="2" RadiusX="10" RadiusY="10"/>

enter image description here

68
Kent Boogaart

WPFボーダーコントロールは破線をサポートしていません。コントロールに点線/破線の境界線を適用する場合は、装飾者でコントロールを装飾するだけです。

これがサンプルの装飾クラスです。これは、あらゆるUIelementの一般的な装飾です。

class DottedLineAdorner : Adorner
{
    public UIElement AdornedElement { get; set; }

    public DottedLineAdorner(UIElement adornedElement) : base(adornedElement)
    {
        AdornedElement = adornedElement;
    }

    protected override void OnRender(DrawingContext drawingContext)
    {
        Size eltSize = (AdornedElement as FrameworkElement).DesiredSize;
        Pen pen = new Pen(Brushes.Blue, 2) { DashStyle = DashStyles.DashDot };
        drawingContext.DrawRoundedRectangle(null, pen, new Rect(0, 0, eltSize.Width, eltSize.Height), 10, 10);
    }
}

Xamlに単純なテキストブロックがあり、「LayoutGrid」という名前のグリッドに含まれています。

これで、境界線をコードビハインドに適用できます

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        AdornerLayer.GetAdornerLayer(LayoutGrid).Add(new DottedLineAdorner(textblock));
    }
9