Подтвердить что ты не робот

Как создать пунктирную границу с закругленными углами в WPF?

Элемент Rectangle имеет StrokeDashArray, который позволяет его рисовать с тире, но он не поддерживает закругленные углы. Элемент управления Border поддерживает хорошие толстые линии с закругленными углами, но будет рисовать сплошные линии.

Какой лучший способ добиться пунктирной границы с закругленными углами, с любым контролем?

Пример пунктирной границы http://img524.imageshack.us/img524/3186/dashedborder.png

4b9b3361

Ответ 1

Вы ошибаетесь, что Rectangle не поддерживает это:

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

введите описание изображения здесь

Ответ 2

Пограничный контроль WPF не поддерживает пунктирные линии. Если вы хотите применить пунктирную/пунктирную границу для элемента управления, вы можете просто украсить элемент управления с помощью adorner.

Вот пример класса adorner. Это универсальный adorner для любого 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);
    }
}

У меня есть простой текстовый блок в моем xaml, и он содержится в сетке с именем LayoutGrid.

Теперь граница может быть применена в коде

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