Вы можете использовать свойство Clip Границы следующим образом:
<Border BorderBrush="Black"
BorderThickness="1"
CornerRadius="8"
Margin="0,0,5,0">
<Border.Clip>
<PathGeometry>
<PathFigure StartPoint="0,0">
<LineSegment Point="70,0" />
<LineSegment Point="70,20" />
<LineSegment Point="50,50" />
<LineSegment Point="0,70" />
</PathFigure>
</PathGeometry>
</Border.Clip>
К сожалению, координаты точек должны быть заданы, и они не будут соответствовать размеру Границы.Чтобы преодолеть это, вы можете добавить обработчик события SizeChanged к границе следующим образом:
<Border BorderBrush="Black"
BorderThickness="1"
CornerRadius="8"
Margin="0,0,5,0" SizeChanged="Border_SizeChanged" >
<Border.Clip>
<PathGeometry>
<PathFigure x:Name="BorderClipFigure" StartPoint="0,0">
<LineSegment Point="70,0" />
<LineSegment Point="70,20" />
<LineSegment Point="50,50" />
<LineSegment Point="0,70" />
</PathFigure>
</PathGeometry>
</Border.Clip>
и написать код в обработчике, который использует размер границы для изменения точек PathFigure:
private void Border_SizeChanged(object sender, SizeChangedEventArgs e)
{
double cutOff = 20;
var line = BorderClipFigure.Segments[0] as LineSegment;
line.Point = new Point(e.NewSize.Width, 0);
line = BorderClipFigure.Segments[1] as LineSegment;
line.Point = new Point(e.NewSize.Width, e.NewSize.Height - cutOff);
line = BorderClipFigure.Segments[2] as LineSegment;
line.Point = new Point(e.NewSize.Width - cutOff, e.NewSize.Height);
line = BorderClipFigure.Segments[3] as LineSegment;
line.Point = new Point(0, e.NewSize.Height);
}