سؤال

انا لدي InkCanvas على نافذة أسمح فيها للمستخدم بالرسم باستخدام القلم أو اللمس أو الماوس.كما أسمح للمستخدم بإضافة نص.ينقر المستخدم على زر "إضافة نص"، ثم ينقر على المكان الذي يريد النص فيه على اللوحة القماشية.يظهر مربع نص هناك، مما يسمح لهم بالكتابة.عند الدخول أو التركيز المفقود، أقوم بإنشاء ملف ContentControl وإضافته إلى myInkCanvas.Children.

أود أن يتمكن المستخدم من مسح النص الذي قام بإنشائه عندما InkCanvas في وضع المسح (أنا أستخدم EraseByPoint).لقد حاولت التقاط MouseEnter و PreviewMouseMove أحداث عناصر التحكم في المحتوى، ولكن لا يبدو أن أيًا منهما يتم إطلاقه.

هل هناك حدث يمكنني التقاطه؟هل هناك طريقة أفضل للتعامل مع هذا السيناريو؟هل هذا ممكن حتى؟

هل كانت مفيدة؟

المحلول

يمكنك استخدام اختبار النجاح لهذا الغرض
ينظر الى هنا

احصل على 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 لإزالة هذا الكائن

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top