WPF InkCanvas 继承 class

WPF InkCanvas inherit class

我想创建一个自定义 InkCanvas Adorner 并找到背后的逻辑:

You can re-use the existing lasso functionality of the InkCanvasEditingMode.Select mode. Then, in the SelectionChanged event, you can get a reference to the selected strokes (and/or elements). Now clear the selection (to get rid of the standard adorner) and then bring up your custom adorner.

我如何继承 InkCanvas class 我自己的编辑模式 class 并访问事件?

class myInkCanvasClass : InkCanvas ?
{
    base class constructor call ?
    ...

}

您不必继承 InkCanvasSelectionChangedInkCanvas 上的 public 事件,因此您只需向其添加处理程序即可。此外,EditingMode 是一个 public 属性,您也可以在 InkCanvas 的实例上设置它。因此,要将处理程序添加到 SelectionChanged 并在 InkSelect 之间切换 EditingMode,您只需使用 public API 11=]实例。

基本示例:

inkCanvas.SelectionChanged += InkCanvas_SelectionChanged;
inkCanvas.EditingMode = InkCanvasEditingMode.Select;

我成功地将 InkCanvas Class 继承到我的 CustomInkCanvas Class 并获得了 SelectionChanged 的​​ EventListener:

public class CustomInkCanvas : InkCanvas
{
    //variables 

    //constructor
    public CustomInkCanvas()
    {
       //...
    }

    override protected void OnSelectionChanged(EventArgs e) 
    {
        MessageBox.Show("Selection Changed");
    }
}

因此,如果我更改选择,我会被注意到。

[DebuggerDisplay("[{Scene}]Strokes:{Strokes.Count}, Children:{Children.Count}")]
public class InkCanvas_Sandeep : InkCanvas
{
    public int PagId = -1;
    public InkCanvas_Sandeep()
    {
        DefaultDrawingAttributes.Color = Colors.Red;
        DefaultDrawingAttributes.FitToCurve = true;
        DefaultDrawingAttributes.Height = 2;
        DefaultDrawingAttributes.Width = 2;
        DefaultDrawingAttributes.IgnorePressure = false;
        DefaultDrawingAttributes.IsHighlighter = false;
        DefaultDrawingAttributes.StylusTip = System.Windows.Ink.StylusTip.Ellipse;
        DefaultDrawingAttributes.StylusTipTransform = Matrix.Identity;
        HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
        VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
        SnapsToDevicePixels = true;
    }
}
public void createMultipleInstances()
{
    InkCanvas_Sandeep canvas new InkCanvas_Sandeep();
    canvas.PagId = ++PageDetails.PageId;
}