Frage

Ich erstelle ein Windows Forms von Usercontrol abgeleitete Steuerung in einer WPF-Anwendung eingebettet werden. Ich habe im Allgemeinen nach dem angegebenen Verfahren in diesem Link .

public ref class CTiledImgViewControl : public UserControl
{
...

virtual void OnPaint( PaintEventArgs^ e ) override;

...
};

Und in meiner CPP-Datei:

void CTiledImgViewControl::OnPaint( PaintEventArgs^ e )
{
    UserControl::OnPaint(e);
    // do something interesting...
}

Alles kompiliert und ausgeführt, aber die OnPaint-Methode nie aufgerufen zu werden.

Alle Ideen der Dinge zu suchen? Ich habe viel mit C ++ getan, aber ich bin ziemlich neu für WinForms und WPF, so dass es auch etwas offensichtlich sein könnte ...

War es hilfreich?

Lösung

Die OnPaint wird normalerweise nicht in einer UserControl aufgerufen, wenn Sie den entsprechenden Stil festgelegt, wenn es die SetStyle Verfahren konstruiert ist, verwendet wird. Sie müssen den UserPaint Stil auf true setzen für den OnPaint genannt werden.

SetStyle(ControlStyles::UserPaint, true);


Update

Vor kurzem habe ich dieses Thema mich gestoßen und ging auf eine Antwort zu graben. Ich wollte einige Berechnungen während einer Farbe durchzuführen (den einzigartigen Umgang mit Farbe Botschaften nutzen), aber ich war nicht immer einen Anruf bekommen OnPaint.

Nach dem Graben um mit Reflektor, entdeckte ich, dass OnPaint nur, wenn das Clipping-Rechteck der entsprechenden WM_PAINT Nachricht aufgerufen wird, nicht leer ist. Meine UserControl Instanz hatte ein Kind Steuerelement, das seinen gesamten Client-Bereich gefüllt und daher abgeschnitten alles. Dies bedeutete, dass das Clipping-Rechteck war leer und so kein OnPaint Anruf.

ich um dieses arbeitete von WndProc zwingende und einen Handler für WM_PAINT Zugabe direkt, wie ich nicht einen anderen Weg finden könnte zu erreichen, was ich wollte.

Andere Tipps

Ich löste das Problem, falls es jemanden interessiert. Es war, weil meine WinForms Kontrolle in einem ViewBox eingebettet wurde. Habe ich es zu einem Gitter und begann sofort immer male Veranstaltungen. Ich denke, wenn Fragen über WPF zu fragen, sollten Sie immer die XAML in der Frage enthalten!

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