Löschen Sie Kinder eines InkCanvas
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?
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