2016-11-11 104 views
0

我有一个基于一组矩形/椭圆几何的路径。当我在它周围放置一个自动调整大小的边框时,边框会缩小以适应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> 

回答

2

您可以将其Width设置Path的Stretch财产和绑定到几何的边界宽度:

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

由于几何图形的边界不包含渲染路径的StrokeThickness,您可以将边框放入Canvas(根本不调整其子元素),并且不设置路径的宽度。但是,如果要将Canvas居中放置在外部网格中,这可能会导致问题。它的实际大小似乎为零。

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

为了在运行时生成规模,您可以使用'Width =“{Binding Bounds.Width,ElementName = geoGroup}''进一步扩展它。 – Funk

+0

对不起,是的,我应该提到我需要几何体保持其定义的大小。 Funk,有没有办法让这项工作包括笔画厚度?它仍然按比例缩小以适应笔画输入。 – Vimes

+1

@JVimes您可以使用绑定转换器将宽度值添加到固定值,或者在您还传递StrokeThickness的情况下使用MultiBinding,或使用[GetWidenedPathGeometry](https: //msdn.microsoft.com/en-us/library/ms615692(v=vs.110).aspx)来计算确切的边界。 – Clemens