30 votes

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

L'élément Rectangle a StrokeDashArray qui lui permet d'être dessiné avec des tirets, mais il ne prend pas en charge 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 un contrôle?

Exemple de bordure en pointillés

69voto

Kent Boogaart Points 97432

Vous vous trompez que Rectangle ne prend pas en charge ceci:

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

texte alternatif

9voto

Le contrôle des frontières WPF ne prend pas en charge les lignes en pointillés. Si vous souhaitez appliquer une bordure en pointillés / en pointillés pour un contrôle, vous pouvez simplement décorer le contrôle avec un adorateur.

Voici l'exemple de classe adorner. C'est un adorner 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 bloc de texte 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));
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X