2009-06-26 24 views
28

El elemento Rectangle tiene StrokeDashArray que le permite dibujarse con guiones, pero no admite esquinas redondeadas. El control Border admite lindas líneas gruesas con esquinas redondeadas, pero solo dibujará líneas continuas.¿Cómo creo un borde discontinuo con esquinas redondeadas en WPF?

¿Cuál es la mejor manera de lograr un borde discontinuo con esquinas redondeadas, con algún control?

Example of dashed border http://img524.imageshack.us/img524/3186/dashedborder.png

Respuesta

65

Se equivoca Rectangle que no admite esta:

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

enter image description here

+0

Su vínculo de la imagen parece haberse roto. Si todavía tiene la imagen original, vuelva a cargarla en stack.imgur, o simplemente edite su respuesta para que funcione sin la imagen. Gracias. –

8

control de WPF Frontera no es compatible con líneas discontinuas. Si desea aplicar un borde punteado/discontinuo para un control, simplemente puede decorar el control con un adorner.

Aquí está la clase de muestra de adorno. Este es un adorno genérico para cualquier elemento de UI.

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

Tengo un bloque de texto simple en mi xaml y está contenido en una cuadrícula denominada 'LayoutGrid'.

Ahora, la frontera se puede aplicar en el código detrás

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