Wie redraw oder refresh in OnRender?
Möchte ich etwas zu zeichnen dynamisch. Folgende code zeigt meine OnRender. Ich werde DrawItem-irgendwo in meinem Programm, wo ich es brauche. Aber wenn ich rufe DrawItem =5;
was muss ich nennen, so dass OnRender aufgerufen wird?
protected override void OnRender(DrawingContext drawingContext)
{
switch (DrawItem)
{
case 1:
//Draw Item
break;
case 2:
//Draw Item
break;
case 3:
//Draw Item
break;
case 4:
//Draw Item
break;
case 5:
//Draw Item
break;
}
base.OnRender(drawingContext)
}
public int DrawItem { get; set; }
- Zeichnet was?
- die "neuen" ziehen Element
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Frage ist nicht klar, aber von dem, was ich verstehen kann, Sie scheinen zu Fragen, für eine Methode zum aktualisieren der Grafik nach der Aktualisierung Ihrer Zeichnung Variablen. Könnten Sie die folgenden nach der Aktualisierung Ihrer Zeichnung Variablen:
und mit der Eigenschaft:
Wenn die Größe des Steuerelements ändert, können Sie
InvalidateVisual()
jedoch halten Sie im Verstand dies verursacht eine Recht teure re-layout des UI. Wenn die Größe Ihrer Kontrolle ist, bleiben die gleichen, sollte man das auch nicht nennenInvalidateVisual()
.Eine effizientere Möglichkeit zum aktualisieren der Benutzeroberfläche ist das erstellen einer
DrawingGroup
"backing store" und fügen Sie es in dieDrawingContext
währendOnRender()
. Sie können dann aktualisieren Sie Sie, Wann immer Sie möchten, mitDrawingGroup.Open()
und WPF aktualisiert Ihre UI.Wenn das klingt verwirrend, denken Sie daran, dass WPF eine beibehalten Zeichnung system. Das bedeutet, dass
OnRender()
könnte besser genannt werdenAccumulateDrawingObjects()
. Es ist eigentlich gehabt, einen Baum von live-Zeichnung-Objekte, von denen einige (wie DrawingGroup, RenderTargetBitmap und WriteableBitmap) später aktualisiert werden können.Dies ist, wie es aussieht:
Lief ich in ähnliches Problem und fand eine noch elegantere Lösung. Definieren Sie eine DependencyProperty-wie so:
Der Schlüssel hier ist:
So, jetzt die Eigenschaft kann festgelegt werden, in XAML und updates von visual automatisch auf ändern.
http://msdn.microsoft.com/de-de/library/ms598919(v=vs. 100).aspx
Zu nennen InvalidateVisual für die Steuerung, die upgedatet werden soll. Aber wie Sie Lesen können, einen Anruf zu InvalidateVisual bewirkt eine vollständige layout-Zyklus, so sicher sein, dass Sie aus performance-Gründen, dass Ihre Leinwand oder was auch immer Sie wollen, ziehen auf, enthält keine oder nur wenige untergeordnete Elemente.