如何从自定义形状中获取零件

时间:2014-11-25 19:09:47

标签: c# wpf shape

我有自定义形状。

public class Procedure : Shape
{
    protected override System.Windows.Media.Geometry DefiningGeometry
    {
        get 
        {
            GeometryGroup gg = new GeometryGroup();
            gg.FillRule = FillRule.Nonzero;
            RectangleGeometry rg = new RectangleGeometry(bound, 10, 10);
            Geometry geometry = label.BuildGeometry(new Point(innerLabelOffsetX, innerLabelOffsetY));

            gg.Children.Add(rg);
            gg.Children.Add(geometry);
            gg.Children.Add(inputPort.Geometry);
            gg.Children.Add(outputPort.Geometry);

            return gg;
        }
    }
}

其中boundRectlabelFormattedTextinputPortoutputPort是我的自定义形状。

看起来像这样

enter image description here

我想获得有关图中点击部分的信息。 我怎么能这样做?

前:

  1. 点击左侧圈是消息"输入端口"
  2. 点击右边的圆圈是消息"输出端口"

1 个答案:

答案 0 :(得分:1)

您需要执行几个步骤:

0)首先,您必须定义delegate,例如在应用的命名空间中:

public delegate void MouseDownHandler( object sender);

1)在自定义形状类中,您必须在MouseDownHandler上定义事件。喜欢:

public event MouseDownHandler MouseDownEvent;

2)在自定义形状类的构造函数中,您必须填写此字符串:

this.MouseDown += new System.Windows.Input.MouseButtonEventHandler(CustomShape_MouseDown); 

3)之后,定义两种方法:

private void CustomShape_MouseDown(object sender,
 System.Windows.Input.MouseButtonEventArgs e)
         {
             OnMouseDownHandler(this);
         }

private void OnMouseDownHandler(object sender)
         {
             if (MouseDownEvent != null) { MouseDownEvent(sender); }
         }

4)随着您的自定义形状类结束。现在让我们在你的UI类中写下一些代码:

MouseDownHandler _perform_click = new MouseDownHandler(OnCustomShapeMouseDown);

private void OnCustomShapeMouseDown(object sender)
            {
                ...your actions on custom shape click event...like message "Input port" or smth
            }

5)最后一步,您必须将_perform_click处理程序分配给形状类中的处理程序。在UI的构造方法中,例如:

_custom_shape.MouseDownEvent += _perform_click;

_custom_shape是自定义形状类的对象。您也可以在UI构造函数中创建它。

那就是它。