C# 将线几何与椭圆几何相结合(在代码中,而不是在XAML中)

C# 将线几何与椭圆几何相结合(在代码中,而不是在XAML中),c#,wpf,geometry,shape,C#,Wpf,Geometry,Shape,我正在尝试使用WPF创建自定义形状。首先,我只是尝试创建一条简单的线,每一端都有一个圆(我知道有线帽,但这不是我想要的) 我看过一些教程,最简单的方法是使用组合几何法。但是我不能让它正常工作。以下是创建几何体对象的代码: protected override Geometry DefiningGeometry { get { Point ellipseCenter1 = new Point(X1 - this.CapDiameter

我正在尝试使用WPF创建自定义形状。首先,我只是尝试创建一条简单的线,每一端都有一个圆(我知道有线帽,但这不是我想要的)

我看过一些教程,最简单的方法是使用
组合几何法。但是我不能让它正常工作。以下是创建几何体对象的代码:

protected override Geometry DefiningGeometry
    {
        get
        {
            Point ellipseCenter1 = new Point(X1 - this.CapDiameter / 2, Y1 - this.CapDiameter / 2);
            Point ellipseCenter2 = new Point(X2 - this.CapDiameter / 2, Y2 - this.CapDiameter / 2);
            var ellipse1 = new EllipseGeometry(ellipseCenter1, CapDiameter, CapDiameter);
            var ellipse2 = new EllipseGeometry(ellipseCenter2, CapDiameter, CapDiameter);
            var line = new LineGeometry(this.StartPoint, this.EndPoint);

            var combined1 = new CombinedGeometry(GeometryCombineMode.Union, ellipse1, line);
            var combined2 = new CombinedGeometry(GeometryCombineMode.Union, combined1, ellipse2);

            // Freeze the geometry for performance benefits
            combined2.Freeze();

            return combined2;
        }
    }
然而,出于某种原因,这并没有划清界限。它画两个圆,但不画线。很明显我在这里遗漏了什么,有人能指出什么吗?:)

为了以防万一,以下是本课程的其他内容:

#region Dependency Properties
public static readonly DependencyProperty X1Property = 
    DependencyProperty.Register(
        "X1", 
        typeof(double),
        typeof(CappedLine), 
        new FrameworkPropertyMetadata(
                0.0, 
                FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure
            )
    );
public static readonly DependencyProperty Y1Property =
    DependencyProperty.Register(
        "Y1",
        typeof(double),
        typeof(CappedLine),
        new FrameworkPropertyMetadata(
                0.0,
                FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure
            )
    );
public static readonly DependencyProperty X2Property =
    DependencyProperty.Register(
        "X2",
        typeof(double),
        typeof(CappedLine),
        new FrameworkPropertyMetadata(
                0.0,
                FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure
            )
    );
public static readonly DependencyProperty Y2Property =
    DependencyProperty.Register(
        "Y2",
        typeof(double),
        typeof(CappedLine),
        new FrameworkPropertyMetadata(
                0.0,
                FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure
            )
    );
public static readonly DependencyProperty CapDiameterProperty =
    DependencyProperty.Register(
        "CapDiameter",
        typeof(double),
        typeof(CappedLine),
        new FrameworkPropertyMetadata(
                0.0,
                FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure
            )
    );

#endregion
#region CLR Properties

public double X1
{
    get { return (double)base.GetValue(X1Property); }
    set { base.SetValue(X1Property, value); }
}

public double Y1
{
    get { return (double)base.GetValue(Y1Property); }
    set { base.SetValue(Y1Property, value); }
}

public double X2
{
    get { return (double)base.GetValue(X2Property); }
    set { base.SetValue(X2Property, value); }
}

public double Y2
{
    get { return (double)base.GetValue(Y2Property); }
    set { base.SetValue(Y2Property, value); }
}

public Point StartPoint
{
    get { return (new Point(X1, Y1)); }
}

public Point EndPoint
{
    get { return (new Point(X2, Y2)); }
}

public double CapDiameter
{
    get { return (double)base.GetValue(CapDiameterProperty); }
    set { base.SetValue(CapDiameterProperty, value); }
}

#endregion
下面是我用来测试它的
XAML
代码:


如果尝试将
线几何体
对象联合起来,它们将消失。从MSDN:

GeometryCombineMode属性指定两个几何图形的显示方式 合并。请注意,CombinedGeometry将 两个几何体,因此没有面积的几何体(例如 线条几何体)在组合时消失

您可以使用
GeometryGroup

GeometryGroup combined = new GeometryGroup();
combined.Children.Add(ellipse1);
combined.Children.Add(ellipse2);
combined.Children.Add(line);

或者您可以先在椭圆对象上使用
组合几何测量
,然后使用
几何测量组将其与直线一起分组

非常感谢!成功了。
GeometryGroup combined = new GeometryGroup();
combined.Children.Add(ellipse1);
combined.Children.Add(ellipse2);
combined.Children.Add(line);