WPF InkCanvas 继承类
Posted
技术标签:
【中文标题】WPF InkCanvas 继承类【英文标题】:WPF InkCanvas inherit class 【发布时间】:2016-05-16 19:11:33 【问题描述】:我想创建一个自定义 InkCanvas Adorner,发现背后的逻辑:
您可以重复使用 InkCanvasEditingMode.Select 模式的现有套索功能。然后,在 SelectionChanged 事件中,您可以获得对选定笔划(和/或元素)的引用。现在清除选择(以摆脱标准装饰器),然后调出您的自定义装饰器。
如何在我自己的类中继承具有编辑模式的 InkCanvas 类并访问事件?
class myInkCanvasClass : InkCanvas ?
base class constructor call ?
...
【问题讨论】:
【参考方案1】:[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;
【讨论】:
【参考方案2】:您不必从InkCanvas
继承,SelectionChanged
是InkCanvas
上的公共事件,因此您只需向其添加处理程序即可。 EditingMode
也是一个公共属性,您也可以在 InkCanvas
的实例上设置它。因此,要将处理程序添加到SelectionChanged
并在Ink
和Select
之间切换EditingMode
,您只需使用InkCanvas
实例的公共API。
基本示例:
inkCanvas.SelectionChanged += InkCanvas_SelectionChanged;
inkCanvas.EditingMode = InkCanvasEditingMode.Select;
【讨论】:
我想在触发 SelectionChanged 事件时删除原始 InkCanvas - Select - Adorner 并将其替换为自定义 Adorner。所以我认为,我必须继承 InkCanvas 类并在 SelectionChanged 事件上调用自定义 Adorner。我将如何完成这个?【参考方案3】:我设法将 InkCanvas 类继承到我的 CustomInkCanvas 类并获得了 SelectionChanged 的 EventListener:
public class CustomInkCanvas : InkCanvas
//variables
//constructor
public CustomInkCanvas()
//...
override protected void OnSelectionChanged(EventArgs e)
MessageBox.Show("Selection Changed");
所以,如果我更改了一个选择,我会被注意到。
【讨论】:
以上是关于WPF InkCanvas 继承类的主要内容,如果未能解决你的问题,请参考以下文章
WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 时加上背景色和按钮方法
WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 时加上背景色和按钮方法
WPF InkCanvas EditingMode为Select时 在其选择时各种事件中撤销Select模式的方法
WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 做高性能笔迹应用