c# - 删除 InkCanvas 的子项

标签 c# wpf inkcanvas

我在一个窗口上有一个 InkCanvas,我允许用户在其中使用手写笔、触摸或鼠标进行绘图。我还允许用户添加文本。用户点击“添加文本”按钮,然后点击 Canvas 上他们想要文本的位置。那里会出现一个文本框,允许他们输入。在进入或失去焦点时,我创建一个 ContentControl 并将其添加到 myInkCanvas.Children

我希望用户能够在 InkCanvas 处于删除模式时删除他们创建的文本(我正在使用 EraseByPoint)。我试图捕获内容控件的 MouseEnterPreviewMouseMove 事件,但似乎都没有触发。

是否有我可以捕获的事件?有没有更好的方法来处理这种情况?有可能吗?

最佳答案

您可以为此目的使用 HitTest
here

先获取 InkPresenter

public T GetVisualChild<T>(Visual parent) where T : Visual
{
    T child = default(T);
    int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
    for (int i = 0; i < numVisuals; i++)
    {
        Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
        child = v as T;
        if (child == null)
        {
            child = GetVisualChild<T>(v);
        }
        if (child != null)
            break;
    }
    return child;
}

InkPresenter inkPresenter = GetVisualChild<InkPresenter>(myInkCanvas);

然后得到你点的 HitTestResult

HitTestResult hitTestResult = VisualTreeHelper.HitTest(inkPresenter, new Point(x, y));

然后你可以使用hitTestResult.VisualHit来移除这个对象

关于c# - 删除 InkCanvas 的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6379060/

相关文章:

c# - 如何在代码中设置 DataGridTextColumn 的绑定(bind)?

c# - wpf c# 中的 FolderBrowserDialog

c# - 通过 ComboBox 更改 RichTextBox Selection 的字体大小无法正常工作

c# - 在 Microsoft Surface Window 上模拟触摸输入

c# - 在 C# 中将字符串打印到字节指针

c# - 使用 String.Format() 格式化字符串日期

c# - UWP InkCanvas 用颜色填充徒手绘制的形状

c# - 将 InkCanvas 笔划转换为字节数组并再次转换回来

c# - 在 powershell 中使用 nuget 外部工具

c# - 使用 foreach 循环连接两个 List<T>