Frage

Ich habe einen InkCanvas in einem Fenster, in dem der Benutzer mit einem Stift, einer Berührung oder einer Maus zeichnen kann.Ich erlaube dem Benutzer auch, Text hinzuzufügen.Der Benutzer tippt auf die Schaltfläche "Text hinzufügen" und anschließend auf die Stelle auf der Leinwand, an der er seinen Text haben möchte.Dort wird ein Textfeld angezeigt, in das sie eingeben können.Bei Eingabe oder Fokusverlust erstelle ich einen ContentControl und füge ihn dem myInkCanvas.Children hinzu.

Ich möchte, dass der Benutzer den von ihm erstellten Text löschen kann, wenn sich der InkCanvas im Löschmodus befindet (ich verwende EraseByPoint).Ich habe versucht, die Ereignisse MouseEnter und PreviewMouseMove der Inhaltssteuerelemente zu erfassen, aber beide scheinen nicht ausgelöst zu werden.

Gibt es ein Ereignis, das ich erfassen kann?Gibt es eine bessere Möglichkeit, mit diesem Szenario umzugehen?Ist es überhaupt möglich?

War es hilfreich?

Lösung

Zu diesem Zweck können Sie Treffer-Tests verwenden.
Schauen Sie sich hier
an

zuerst InkPresenter holen

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);

dann erhalten Sie HitTestResult Ihres Punktes

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

dann können Sie hitTestResult.VisualHit verwenden, um dieses Objekt zu entfernen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top