嵌套WPF路径

时间:2010-07-08 17:07:45

标签: .net wpf

我正在尝试为我正在WPF中工作的应用程序创建一个维恩图控件。我只是想在此刻创建一个双向维恩,所以两个圆圈相互重叠。

我正在尝试使用两种功能:
1.控制器必须调整维恩的大小以填充可用空间 2.维恩的每个部分都应该输入鼠标并使用不同的颜色。

我可以同时做这两件事......

目前我的代码看起来像这样:

<Grid>  
<Path Stretch="Uniform" Fill="Blue" >
  <Path.Data>
    <GeometryGroup>
      <CombinedGeometry GeometryCombineMode="Exclude" >
        <CombinedGeometry.Geometry1>
          <EllipseGeometry Center="-25, 0" RadiusX="50" RadiusY="50"/>
        </CombinedGeometry.Geometry1>
        <CombinedGeometry.Geometry2>
          <EllipseGeometry Center="25, 0" RadiusX="50" RadiusY="50"/>
        </CombinedGeometry.Geometry2>
      </CombinedGeometry>
      <CombinedGeometry GeometryCombineMode="Exclude" >
        <CombinedGeometry.Geometry1>
          <EllipseGeometry Center="25, 0" RadiusX="50" RadiusY="50"/>
        </CombinedGeometry.Geometry1>
        <CombinedGeometry.Geometry2>
          <EllipseGeometry Center="-25, 0" RadiusX="50" RadiusY="50"/>
        </CombinedGeometry.Geometry2>
      </CombinedGeometry>
      <CombinedGeometry GeometryCombineMode="Intersect">
        <CombinedGeometry.Geometry1>
          <EllipseGeometry Center="-25, 0" RadiusX="50" RadiusY="50"/>
        </CombinedGeometry.Geometry1>
        <CombinedGeometry.Geometry2>
          <EllipseGeometry Center="25, 0" RadiusX="50" RadiusY="50"/>
        </CombinedGeometry.Geometry2>
      </CombinedGeometry>
    </GeometryGroup>
  </Path.Data>
</Path>

正如你所看到的,我正在为我的Venn部分使用Geometry对象,但我希望拥有Path对象,以便我可以支持交互和样式。这可能吗?有没有更好的方法呢?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您将每个CombinedGeometry对象用作单独路径的数据,则可以获得不同的交互和颜色。为了使其正确调整大小,您可以将网格放在ViewBox而不是在路径上设置拉伸。这不会移动原点,因此您需要将椭圆移动到(50,50)和(100,50)的中心。

<Viewbox>
    <Grid>
        <Path Fill="Blue">
            <Path.Data>
                <CombinedGeometry GeometryCombineMode="Exclude">
                    <CombinedGeometry.Geometry1>
                        <EllipseGeometry Center="50, 50" RadiusX="50" RadiusY="50"/>
                    </CombinedGeometry.Geometry1>
                    <CombinedGeometry.Geometry2>
                        <EllipseGeometry Center="100, 50" RadiusX="50" RadiusY="50"/>
                    </CombinedGeometry.Geometry2>
                </CombinedGeometry>
            </Path.Data>
        </Path>
        <Path Fill="Red">
            <Path.Data>
                <CombinedGeometry GeometryCombineMode="Exclude" >
                    <CombinedGeometry.Geometry1>
                        <EllipseGeometry Center="100, 50" RadiusX="50" RadiusY="50"/>
                    </CombinedGeometry.Geometry1>
                    <CombinedGeometry.Geometry2>
                        <EllipseGeometry Center="50, 50" RadiusX="50" RadiusY="50"/>
                    </CombinedGeometry.Geometry2>
                </CombinedGeometry>
            </Path.Data>
        </Path>
        <Path Fill="Purple">
            <Path.Data>
                <CombinedGeometry GeometryCombineMode="Intersect">
                    <CombinedGeometry.Geometry1>
                        <EllipseGeometry Center="50, 50" RadiusX="50" RadiusY="50"/>
                    </CombinedGeometry.Geometry1>
                    <CombinedGeometry.Geometry2>
                        <EllipseGeometry Center="100, 50" RadiusX="50" RadiusY="50"/>
                    </CombinedGeometry.Geometry2>
                </CombinedGeometry>
            </Path.Data>
        </Path>
    </Grid>
</Viewbox>