我有自定义形状。
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;
}
}
}
其中bound
为Rect
,label
为FormattedText
。 inputPort
和outputPort
是我的自定义形状。
看起来像这样
我想获得有关图中点击部分的信息。 我怎么能这样做?
前:
答案 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构造函数中创建它。
那就是它。