web-dev-qa-db-ja.com

側面のストロークの太さが異なるWPF長方形、または破線のストロークがある境界線

長方形で破線の境界線を作成したり、辺ごとに異なるストロークの太さで境界線を作成したりできることは知っています。

        <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>

enter image description here

とにかく両方を達成できますか?

enter image description here

更新:これは、親のスペースを埋める必要があります(固定サイズの例とは異なります)。グリッド-固定サイズのDrawingGeometryと私のペンを使用してこれを達成することはできません。できますか?

16
markmnl

これを試して:

<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>

境界線なので、グリッドの内側に配置すると、利用可能なスペースが使用され、各辺に異なる幅を設定できます。視覚ブラシに長方形を使用するため、境界線を簡単に破線に設定できます。

enter image description here

22
lisp

ハックな解決策ですが、それは機能しますが、隠したい破線の四角形の側面をカバーすることです:

            <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>

enter image description here

1
markmnl