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
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"/>
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));
}