如何在Silverlight的Border元素上创建虚线边框?

7

如何使这个边框 Silverlight 元素的底部边框有一个红色点状线在红色实线内?

Border border = new Border();
border.CornerRadius = new CornerRadius(5);
border.BorderThickness = new Thickness(0, 0, 0, 1);
border.BorderBrush = new SolidColorBrush(Colors.Red);
2个回答

12

您可以用 Grid 替换 border 并给它一个填满整个区域的矩形吗?

<Rectangle Stretch="Fill" RadiusX="10" RadiusY="10" StrokeDashArray="10, 2" Stroke="Black" Fill="White" />

可以使用StrokeDashArray属性绘制虚线,但边框没有这样的属性。

编辑:

既然我注意到你只是在底部边框上打点,你可以像这样做

<Border Width="100" Height="100" Background="Blue" BorderThickness="0,0,0,1">
    <Border.BorderBrush>
        <LinearGradientBrush StartPoint="0,0" EndPoint=".2,0" SpreadMethod="Repeat" >
            <GradientStopCollection>
                <GradientStop Color="Transparent" Offset="0" />
                <GradientStop Color="Transparent" Offset="0.3" />
                <GradientStop Color="Red" Offset="0.3" />
                <GradientStop Color="Red" Offset="0.6" />
                <GradientStop Color="Transparent" Offset="0.6" />
                <GradientStop Color="Transparent" Offset="1" />
            </GradientStopCollection>
        </LinearGradientBrush>
    </Border.BorderBrush>
</Border>

调整中间两个渐变停止点的偏移量以调整红色点/虚线的宽度。您可能还需要调整终点以使其在所需间隔处重复。


2
如果您不希望在调整大小时沿着线移动破折号,您应该在LinearGradientBrush上设置MappingMode="Absolute"。在进行此更改后,您可能还需要微调其他一些参数。 - Drew Noakes

6

Stephan的回答很有用。但是,如果你想要一个简单的虚线,在重新调整大小时不会拉伸,可以尝试使用以下XAML:

<!-- Horizontal dotted line -->
<Border HorizontalAlignment="Stretch" Height="1" BorderThickness="0,0,0,1">
  <Border.BorderBrush>
    <LinearGradientBrush StartPoint="0,0" EndPoint="2,0"
                         SpreadMethod="Repeat" MappingMode="Absolute">
        <GradientStop Color="Transparent" Offset="0" />
        <GradientStop Color="Transparent" Offset="0.499" />
        <GradientStop Color="#999" Offset="0.5" />
    </LinearGradientBrush>
  </Border.BorderBrush>                              
</Border>

这里提供一种竖直虚线的替代方法:

<!-- Vertical dotted line -->
<Border VerticalAlignment="Stretch" Width="1" BorderThickness="0,0,1,0">
  <Border.BorderBrush>
    <LinearGradientBrush StartPoint="0,0" EndPoint="0,2"
                         SpreadMethod="Repeat" MappingMode="Absolute">
        <GradientStop Color="Transparent" Offset="0" />
        <GradientStop Color="Transparent" Offset="0.499" />
        <GradientStop Color="#999" Offset="0.5" />
    </LinearGradientBrush>
  </Border.BorderBrush>                              
</Border>

恰巧,如果您在不是1像素宽/高的区域使用此刷子,则会得到漂亮的细条纹图案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接