Laden...

ScrollViewer hüpft

Erstellt von Lector vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.146 Views
L
Lector Themenstarter:in
862 Beiträge seit 2006
vor 14 Jahren
ScrollViewer hüpft

Hallo,

Ich habe ein Problem mit dem ScrollViewer (oder dem VirtualizingStackPanel).
Im Anhang befindet sich ein Mini-Projekt welches mein Problem beschreibt.
Diese Demo besteht aus einer ListBox. Die ListBox zeigt 10 quadratische Buttons an. Die Buttons belegen die gesamte zur Verfügung stehende Größe. Da sie quadratisch sind ist Breit gleich Höhe. Wenn die ListBox nun das richtige Seitenverhältnis hat fäng die ScrollBar an zu springen. Der Grund ist klar:

Die Breite ist nicht ausreichend -> ScrollBar einblenden ->
Diese ScrollBar schränkt die Höhe der Buttons ein -> Buttons weden schmäler ->
Dadurch passt wieder alles auf dem Bildschirm -> ScrollBar wird ausgeblendet ->
das Gleiche nochmal.

In meiner richtigen Anwendung habe ich dieses Problem mit einen eigenen (virtualizing) Panel. Dort werden Bilder angezeigt. In gewissen Szenario tritt auch dieses Springen auf. Nur leider habe ich keine Ahnung wie ich dieses Problem umgehen soll.

Ich bitte um Erfahrungsberichte (falls vorhanden) oder Brainstorming wie man vielleicht vorgehen sollte um dieses Problem zu beheben/umgehen.

1.044 Beiträge seit 2008
vor 14 Jahren

Hallo Lector,

ein solches Verhalten ist mir bekannt, jedoch in einem anderen Zusammenhang. Vor längerer Zeit habe ich an Microsoft den Fehler gemeldet, jedoch keine richtige Antwort auf meinen Fehler erhalten. Vielleicht hilft dir das weiter.

zero_x

L
Lector Themenstarter:in
862 Beiträge seit 2006
vor 14 Jahren

Ich habe mir dein Beispiel einmal angesehen. Das scheint allerdings wenig mit meinem Problem gemein zu haben. Dein Problem tritt beim Binding in VirtualizingStackPanels auf und äußert sich darin dass das Binding null zurückgibt.

Mein Problem besteht darin dass der ScrollViewer sich nicht entscheiden kann ob er eine ScrollBar einblenden soll oder nicht. Sieh dir doch bitte einmal mein Demo-Projekt an.

6.862 Beiträge seit 2003
vor 14 Jahren

Hallo,

Ich habe ein Problem mit dem ScrollViewer (oder dem VirtualizingStackPanel). Weder noch 😃 Es ist dein Code.
Durch dieses Binding

Width="{Binding RelativeSource={RelativeSource Self},Path=ActualHeight}"

erzeugst du dir dieses Verhalten.

Anfangs ist ja alles okay. Je größer du dein Fenster machst, umso höher werden die Items. Dadurch werden sie auch breiter. Irgendwann ist die Breite so groß das die Scrollbar angezeigt wird. Dadurch verringert sich aber wiederum die Höhe der Items. Dadurch werden sie erstmal kleiner und es ist keine Scrollbar mehr nötig. Dadurch aber ist auf einmal wieder mehr Platz in der Höhe verfügbar weil die Scrollbar wieder weg ist und die Items werden größer. Dadurch werden sie breiter, es muss ne Scrollbar angezeigt werden usw. 😃

Baka wa shinanakya naoranai.

Mein XING Profil.

L
Lector Themenstarter:in
862 Beiträge seit 2006
vor 14 Jahren

Ja warum es sich so verhält ist mir auch klar. Nur weis ich nicht wie ich dieses Problem lösen soll.

Fakt ist: Ich habe eine Auflistung von Items. Jedes Item soll soviel Platz wie möglich belegen. Das Seitenverhältnis jedes Items soll gleich bleiben (ergibt bei Bildern z.B. Sinn). Wenn man das mit dem Seitenverhältniss allerdings so eng sieht kommt es zu dem besagten Problem. Die Alternative bestände darin nicht den gesamten Platz zu verwenden. Dann stellt sich allerdings die Frage: wie viel Platz???

In meinen Szenario habe ich ein eigenes VirtualizingPanel welches sich ähnlich wie UniformGrid verhält, nur dass die Items nicht von links nach rechts, sondern von oben nach Unten angeordnet werden.

Dort tritt dieses Problem natürlich auch auf (und auch bei anderen Default-Panels).
Meine Frage ist nun: Wie ordne ich Items sinnvoll an wenn das Seitenverhältniss der Items immer gleich blieben muss und ich keinen Platz vergeuden möchte ohne dass dieses Problem auftritt?

925 Beiträge seit 2004
vor 14 Jahren

Hallo Lector,

ein solches Verhalten ist mir bekannt, jedoch in einem anderen Zusammenhang. Vor längerer Zeit habe ich an
>
den Fehler gemeldet, jedoch keine richtige Antwort auf meinen Fehler erhalten. Vielleicht hilft dir das weiter.

zero_x

Microsoft hat dir doch geantwortet, dass der Converter unter Umständen eine null-Referenz übergeben bekommt, wenn er ein Item konvertieren soll, das nicht mehr existiert, weil es aus optischen Gründen aus dem TreeView entfernt wurde. Du musst also nur den null-Referenz-Fall in deinem Converter abfangen, um die Exception zu umgehen.

Übrigens finde ich es bewundernswert von Microsoft, dass sie überhaupt verstanden haben, was du zu beschreiben versucht hast. Nichts für ungut, nur eine Feststellung, aber dein Englisch ist grauenhaft. 😁