Ich habe eine Anzahl von UserControl (ein Raster mit wenigen Labels) generiert und hinzugefügt Canvas in Laufzeit. Ich habe Drag-and-Drop für jedes UserControl und Knotenlinie (oder Verbindungslinie) zwischen UserControls implementiert.Clear UserControl mit Abhängigkeit Eigenschaft in Canvas
Als ich das Usercontrol mit myCanvas.Children.Clear löschen() erhielt ich den folgenden Fehler in Methode Node_LayoutUpdated():
Das ist mein Usercontrol ist:
public partial class Foo : UserControl
{
public static readonly DependencyProperty AnchorPointProperty =
DependencyProperty.Register(
"AnchorPoint", typeof(Point), typeof(Foo),
new FrameworkPropertyMetadata(new Point(0, 0),
FrameworkPropertyMetadataOptions.AffectsMeasure));
public Point AnchorPoint
{
get { return (Point)GetValue(AnchorPointProperty); }
set { SetValue(AnchorPointProperty, value); }
}
private Canvas mCanvas;
public Foo(Canvas canvas, bool isInput)
{
InitializeComponent();
mCanvas = canvas;
this.LayoutUpdated += Node_LayoutUpdated;
}
void Node_LayoutUpdated(object sender, EventArgs e)
{
Size size = RenderSize;
Point ofs = new Point(size.Width/2, size.Height/2);
AnchorPoint = TransformToVisual(this.mCanvas).Transform(ofs);
}
}
Soll ich die DependencyProperty vor dem Entfernen des UserControl entfernen, und wie? Kann jemand bitte erklären, was diese Fehlermeldung verursacht und warum?
Da die Funktion in dem Usercontrol wohnen Node_LayoutUpdated, ich habe es in MainWindows nicht lösen kann, und ich " Der Name Node_LayoutUpdated existiert nicht im aktuellen Kontext ". Wie entferne ich es dann? – KMC
@KMC Nun, der einfachste Weg wäre, den Code in eine öffentliche Methode Ihres UserControls zu bringen (z. B. die IDisposable-Schnittstelle in Ihr UserControl zu implementieren, den Detach-Code dort einzufügen) und ihn manuell aufzurufen, bevor Sie ihn entfernen. Sie können auch die Ausnahme abfangen und das Ereignis lösen, wenn eine "InvalidOperationException" auftritt. Anstatt "mCanvas" in Ihrem Konstruktor zu setzen, könnten Sie [den VisualTreeHelper verwenden, um das übergeordnete Element des Steuerelements zu finden] (http://stackoverflow.com/questions/636383/how-can-i-find-wpf-controls-by-name) oder Typ) auf Anfrage. –
Entschuldigung, aber ich folge dir nicht. Worum geht es, Node_LayoutUpdated öffentlich zu machen? Das wäre in MainWindows immer noch nicht erreichbar - was meinst du damit, es manuell aufzurufen? – KMC