wpf 定制虚线边框

                               wpf 定制控件虚线边框

该虚线边框能被使用在任何带BorderBrush属性的控件,效果如下:

代码 1:

通用border style 定义,代码来自 

https://stackoverflow.com/questions/6195395/how-can-i-achieve-a-dashed-or-dotted-border-in-wpf

  <DrawingBrush x:Key="borderBrush" Viewport="0,0,8,8" ViewportUnits="Absolute" TileMode="Tile">
            <DrawingBrush.Drawing>
                <DrawingGroup>
                    <GeometryDrawing Brush="Black">
                        <GeometryDrawing.Geometry>
                            <GeometryGroup>
                                <RectangleGeometry Rect="0,0,50,50" />
                                <RectangleGeometry Rect="50,50,50,50" />
                            </GeometryGroup>
                        </GeometryDrawing.Geometry>
                    </GeometryDrawing>
                </DrawingGroup>
            </DrawingBrush.Drawing>
        </DrawingBrush>

 

这其实是wpf brush中一种功能强大的brush, tile brush, 从tile名字可知,主要可以用在图标/图片重复铺陈方面。当然在brush 的内容里也可以使用drawing 对象绘制定制化的图形。以上代码就是绘制了这样图形,因为 Viewport="0,0,8,8", ViewportUnits="Absolute" 指定了该图形将以8个有效像素来绘制,而不是50,50并没有大小的意义;而TileMode="Tile" 是指定了填充模式为重复铺陈。

因此,如果我使用该brush作为区域(区域面积远大于8,8)填充刷时,会是以下的效果:

作为border brush使用方式:

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="100"/>
            <RowDefinition Height="100"/>
            <RowDefinition Height="100"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200"/>
            <ColumnDefinition Width="200"/>
        </Grid.ColumnDefinitions>
        <Border Grid.Row="0" Grid.Column="1" BorderBrush="{StaticResource borderBrush}" BorderThickness="1,1,1,0">
            <TextBlock>Test1</TextBlock>
        </Border>
        <Border Grid.Row="1" Grid.Column="1" BorderBrush="{StaticResource borderBrush}" BorderThickness="1,1,1,0">
            <TextBlock>Test2</TextBlock>
        </Border>
        <Border Grid.Row="2" Grid.Column="1" BorderBrush="{StaticResource borderBrush}" BorderThickness="1">
            <TextBlock>Test3</TextBlock>
        </Border>
    </Grid>

效果如贴图1。

原因是这样的:

因为在这里borderThickness =1, 因此整个 内容只有1/8 能够得到绘制,那么水平方向只得到这样的部分 ,然后重复铺陈,而竖直方向只得到这样的所以就得到第一个图的效果。

从而我们知道,如果我们需要更大的borderThickness, 那么我们就需要调整viewport的size.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值