在CodeBehind

时间:2016-10-18 14:05:29

标签: c# wpf

我是StackOverflow社区的新手,请原谅我糟糕的英语,我试着将其搞定。

我正在使用你的帮助进行我的bachelorthesis,你已经帮了我很多,谢谢。我正在编写一个工具来可视化无线网络中的数据。

我将一个GeometryGroup添加到我的Canvas中,以便将一些CustomControls与一行连接起来。正在更新该行,移动控件等。我使用了以下文章:https://denisvuyka.wordpress.com/2007/10/21/wpf-diagramming-drawing-a-connection-line-between-two-elements-with-mouse/使其正常工作。

这是我在XAML中使用的代码。

<Path Name="myPath" Stroke="#FF132FE0" StrokeThickness="1">
                <Path.Data>
                    <GeometryGroup x:Name="connectors"/>
                </Path.Data>
</Path>

我要做的是创建自己的canvas类并在后面的代码中添加GeometryGroup。我试图做的是:

System.Windows.Shapes.Path pathGroup= new System.Windows.Shapes.Path(); 
BrushConverter bc = new BrushConverter();
Brush Brush = (Brush)bc.ConvertFrom("#FF132FE0");
cmp.Stroke = Brush;
cmp.StrokeThickness = 1;
GeometryGroup connectors= new GeometryGroup();
pathGroup.Data=connectors;

我的问题是,它没有按预期工作。使用XAML实现,我可以使用以下内容:

connectors.Children.Add(obj);

我试着总结一下我的问题。我想用c#代码创建一个GeometryGroup,以便能够随时添加和删除行。

谢谢=)

1 个答案:

答案 0 :(得分:0)

您可能希望拥有一个带有connectors字段的派生Canvas(类似于您问题中显示的XAML创建的字段)。

Canvas将通过覆盖的OnRender方法绘制连接器,如下所示。

public class CustomCanvas : Canvas
{
    private readonly GeometryGroup connectors = new GeometryGroup();

    protected override void OnRender(DrawingContext dc)
    {
        var stroke = new SolidColorBrush(Color.FromRgb(0x13, 0x2F, 0xE0));

        dc.DrawGeometry(null, new Pen(stroke, 1), connectors);

        base.OnRender(dc);
    }
}

派生的Canvas类的另一个方法中的一些附加代码现在可以在Children对象的connectors集合中添加或删除Geometry对象。

您当然也可能要为连接器的Stroke,StrokeThickness等声明属性。