适合任意路径的边框

时间:2016-11-11 20:25:50

标签: c# wpf

我有一个基于一组矩形/椭圆几何的路径。当我在其周围放置一个自动大小的边框时,边框缩小以适合RectangleGeometry但使用EllipseGeometry做一些奇怪的事情,如下所示。任何人都知道如何修复它,所以边框(以蓝色显示)紧贴整个事物?

最终,我想要一个适合任意运行时生成的路径(包括笔触粗细)的边框或面板,我需要保持几何尺寸。

screenshot

示例代码:

<Border BorderBrush="Blue" BorderThickness="2"
        HorizontalAlignment="Center" VerticalAlignment="Center">
    <Path Stroke="Orange" StrokeThickness="5" Fill="Red">
        <Path.Data>
            <GeometryGroup>
                <EllipseGeometry Center="-10,-10" RadiusX="12" RadiusY="12" />
                <EllipseGeometry Center="70,0" RadiusX="70" RadiusY="10">
                    <EllipseGeometry.Transform>
                        <RotateTransform Angle="-25" CenterX="50" CenterY="0" />
                    </EllipseGeometry.Transform>
                </EllipseGeometry>
                <RectangleGeometry Rect="0,0,100,100" />
            </GeometryGroup>
        </Path.Data>
    </Path>
</Border>

1 个答案:

答案 0 :(得分:2)

您可以设置路径Stretch属性并将其Width绑定到几何边界的宽度:

<Path ... Stretch="Uniform"
          Width="{Binding Data.Bounds.Width, RelativeSource={RelativeSource Self}}">
    ...
</Path>

由于几何体的边界不包含渲染的路径StrokeThickness,您可以选择将边框放入画布(根本不调整其子元素的大小),并且#39;设置路径的宽度。但是,当您希望将Canvas置于外部网格中心时,这可能会导致问题。它的实际大小似乎为零。

<Canvas>
    <Border BorderBrush="Blue" BorderThickness="2">
        <Path ... Stretch="Uniform">
            ...
        </Path>
    </Border>
</Canvas>