Как создать пунктирную границу с закругленными углами в WPF? - PullRequest
30 голосов
/ 26 июня 2009

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

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

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

Ответы [ 2 ]

68 голосов
/ 26 июня 2009

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

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

enter image description here

9 голосов
/ 28 июня 2011

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

Вот пример класса для украшения. Это универсальное украшение для любого элемента.

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));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...