Wir haben ein sehr großes Kind-Steuerelement, das viel Rendering ausführt, um seine Details anzuzeigen, aber da nur ein Teil dieses Steuerelements tatsächlich sichtbar ist (es wird von etwas weiter oben in der Hierarchie beschnitten, nicht unbedingt sein unmittelbares Elternteil) wollen wir nur um den sichtbaren Teil während des OnRender-Aufrufs zu rendern.Gibt es eine einfache Möglichkeit, die sichtbaren Grenzen eines Steuerelements zu bestimmen, um das Rendering zu optimieren?
Betrachten Sie das folgende Bild. Das Kind ist 100x50, aber der sichtbare Bereich ist ein Rechteck mit Ecken bei (10,5) und (100,50) in Kindkoordinaten. Das ist der Bereich, den wir suchen.
Hinweis: Sie können nicht einfach tun Koordinatenkonvertierungen vom Kind zum Vater und Test zum Aufstecken, weil es nicht die Eltern sein, die den Ausschnitt tun.
Betrachten Sie verschachtelte Canvas-Steuerelemente in einem ScrollViewer. Der innere Canvas kann sehr gut innerhalb der Grenzen des äußeren Canvas liegen, aber der äußere Canvas kann vom ScrollViewer abgeschnitten werden, so dass auch der innere Canvas von diesem visuell geclippt wird.
Wenn Sie den visuellen Baum durchlaufen und jedes Elternelement testen, wird die Leistung beeinträchtigt.
Gibt es in WPF so etwas, das die Grenzen des sichtbaren Bereichs eines Steuerelements erreichen kann?
Dieser Thread könnte Ihnen helfen, was Sie wollen: http://stackoverflow.com/questions/1517743/in-wpf-how-can-i-determine-whether-a-control-is-visible -to-the-user –
Nein! Das ist nur die Grenze, die überprüft wird (siehe oben meine Anmerkung). Das repräsentiert nicht wirklich, was sichtbar ist. – MarqueIV
Nur ein Stich in die Dunkelheit - verwenden Sie Reflektor, um in die Interna der IsMouseDirectlyOver -Eigenschaft zu schauen (gefunden auf den meisten WPF-Steuerelementen, wahrscheinlich von FrameworkElement geerbt). Diese Eigenschaft durchschaut verschachtelte Objekte, um festzustellen, ob sich die Maus direkt über dem genauen spezifischen Steuerelement befindet. Ich denke, dass Sie in der Lage sein könnten, ähnliche Logik für die Überprüfung der Grenzen zu verwenden ... – Marko