Подтвердить что ты не робот

Прямоугольник 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

?

UPDATE: нужно заполнить пробел в нем родителем (в отличие от моего примера с фиксированными размерами), например. Grid - так что DrawingGeometry, который имеет фиксированные размеры, и моя ручка не может быть использована для достижения этого. Может ли это?

4b9b3361

Ответ 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>

Он граничит, поэтому, когда он помещается внутри сетки, он будет использовать доступное пространство, и вы можете установить различную ширину для каждой стороны, он использует прямоугольник для визуальной кисти, так что вы можете легко установить границы в пунктирные.

enter image description here

Ответ 2

Хакерное решение, но оно работает, чтобы закрыть сторону пунктирного прямоугольника, который вы хотите скрывать:

            <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