Comment créer une bordure en pointillés avec des coins arrondis dans WPF?

L'élément Rectangle a StrokeDashArray ce qui lui permet d'être dessiné avec des tirets, mais il ne supporte pas les coins arrondis. Le contrôle Border prend en charge de belles lignes épaisses avec des coins arrondis, mais ne dessine que des lignes pleines.

Quelle est la meilleure façon d'obtenir une bordure en pointillés avec des coins arrondis, avec n'importe quel contrôle?

Exemple de bordure en pointillés http://img524.imageshack.us/img524/3186/dashedborder.png

28
demandé sur lisp 2009-06-26 13:11:30

2 réponses

Vous vous trompez que Rectangle ne supporte pas ceci:

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

entrez la description de l'image ici

66
répondu Kent Boogaart 2015-07-29 00:50:35

WPF Border control ne prend pas en charge les lignes pointillées. Si vous souhaitez appliquer une bordure pointillée/pointillée pour un contrôle, vous pouvez simplement décorer le contrôle avec un orneur.

Voici l'exemple de classe adorner. Ceci est un orneur générique pour tout 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);
    }
}

J'ai un simple textblock dans mon xaml et il est contenu dans une grille nommée 'LayoutGrid'.

Maintenant, la bordure peut être appliquée dans le code derrière

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        AdornerLayer.GetAdornerLayer(LayoutGrid).Add(new DottedLineAdorner(textblock));
    }
8
répondu Vanathi Palanisamy 2011-06-28 07:31:13