如何在WPF中创建带圆角的虚线边框?

Gra*_*meF 30 c# wpf xaml wpf-controls

Rectangle元素StrokeDashArray允许用虚线绘制,但它不支持圆角.该Border控件支持带圆角的漂亮粗线,但仅绘制实线.

通过任何控制实现带圆角的虚线边框的最佳方法是什么?

虚线边框示例http://img524.imageshack.us/img524/3186/dashedborder.png

Ken*_*art 69

你错了,Rectangle不支持这个:

<Rectangle StrokeDashArray="0.5 1.0 0.3" Stroke="Black" StrokeThickness="2" RadiusX="10" RadiusY="10"/>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 9

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的xaml中有一个简单的文本块,它包含在名为"LayoutGrid"的网格中.

现在,边框可以应用在后面的代码中

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        AdornerLayer.GetAdornerLayer(LayoutGrid).Add(new DottedLineAdorner(textblock));
    }
Run Code Online (Sandbox Code Playgroud)