Ответ 1
Вы ошибаетесь, что Rectangle
не поддерживает это:
<Rectangle StrokeDashArray="0.5 1.0 0.3" Stroke="Black" StrokeThickness="2" RadiusX="10" RadiusY="10"/>
Элемент Rectangle
имеет StrokeDashArray
, который позволяет его рисовать с тире, но он не поддерживает закругленные углы. Элемент управления Border
поддерживает хорошие толстые линии с закругленными углами, но будет рисовать сплошные линии.
Какой лучший способ добиться пунктирной границы с закругленными углами, с любым контролем?
Пример пунктирной границы http://img524.imageshack.us/img524/3186/dashedborder.png
Вы ошибаетесь, что Rectangle
не поддерживает это:
<Rectangle StrokeDashArray="0.5 1.0 0.3" Stroke="Black" StrokeThickness="2" RadiusX="10" RadiusY="10"/>
Пограничный контроль 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));
}