【问题标题】:WPF Rectangle with different stroke thickness on sides or Border with dashed stroke?WPF 矩形在侧面具有不同的笔划粗细或带有虚线笔划的边框?
【发布时间】:2013-06-05 05:10:30
【问题描述】:

我知道我可以为不同的边创建带有矩形的虚线边框或具有不同笔画粗细的边框:

        <StackPanel Orientation="Horizontal">
            <Rectangle Stroke="Green" StrokeThickness="2" StrokeDashArray="4 2"  Fill="LightGreen" Height="64" Width="32" Margin="5"/>
            <Border BorderBrush="Green" BorderThickness="2,2,2,0" Background="LightGreen" Height="64" Width="32" Margin="5" />
        </StackPanel>

有没有我可以同时实现的:

?

更新:这需要填充其父项中的空间(与我的固定大小示例不同),例如一个 Grid - 所以一个具有固定大小的 DrawingGeometry 和我自己的 Pen 不能用于实现这一点.. 可以吗?

【问题讨论】:

    标签: c# wpf xaml wpf-4.0


    【解决方案1】:

    试试这个:

    <Border BorderThickness="4,4,4,0"  Background="LightGreen">
        <Border.BorderBrush>
            <VisualBrush>
                <VisualBrush.Visual>
                    <Rectangle 
                        Stroke="Green" Fill="LightGreen"
                        StrokeDashArray="4 2"
                        StrokeThickness="4"
                        Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualWidth}"
                        Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualHeight}"/>
                </VisualBrush.Visual>
            </VisualBrush>
        </Border.BorderBrush>
    </Border>
    

    它是边框,所以当放在网格内部时,它会使用可用空间,并且您可以为每一边设置不同的宽度,它使用矩形作为视觉刷,因此您可以轻松地将边框设置为虚线。

    【讨论】:

    • 好一个!我从来不知道我可以这样定义自己的画笔!
    【解决方案2】:

    一个 hacky 解决方案,但它的工作原理是覆盖您想要隐藏的虚线矩形的一侧:

                <Grid Width="100" Height="100">
                    <Rectangle Stroke="Green" StrokeThickness="4" StrokeDashArray="4 2"  Fill="LightGreen" Margin="10"/>
                    <Rectangle StrokeThickness="0" Height="4" Margin="10" VerticalAlignment="Bottom" Fill="LightGreen"/>
                </Grid>
    

    【讨论】: