Laden...

WPF Fenster zoomen und erweitern

Erstellt von tomcat78 vor 12 Jahren Letzter Beitrag vor 12 Jahren 4.774 Views
T
tomcat78 Themenstarter:in
5 Beiträge seit 2011
vor 12 Jahren
WPF Fenster zoomen und erweitern

Hallo zusammen,

die Überschrift ist vielleicht etwas missdeutig, aber ich versuche es mal zu erklären.

Wenn ich ein WPF-Fenster am Rand mit der Maus zieh, dann wird die Fläche für Controls größer - ich sehe also ggf. mehr Daten in einem Datagridview oder ähnliches - ich nenn das mal Erweitern. In WPF ist es ja relativ leicht es so zu machen, dass ich der Inhalt an die Fenstergröße anpasst. Es gibt ja so Zoompanel oder sowas. Dann wird bei Größerziehen nicht die Fensterfläche erweitert, sondern die Controls werden vergrößert - also Zoom.

Ich hätte jetzt gerne die Funktion, dass ein Fenster beides kann. Wenn ich es normal größer ziehe, dann soll es erweitert werden. Halte ich beim Ziehen STRG gedrückt, dann soll der Inhalt gezoomt werden. Auch eine Kombination soll möglich sein. Wird der Inhalt zu groß für die aktuell verfügbare Fensterfläche, dann werden Scrollbars angezeigt.

Eigentliche habe ich das auch schon soweit fertig. Ich musste mich zwar an die WindowMessages von Windows dranhängen, da ich keine passenden .NET-Events finden konnte, aber bis jetzt bin ich ganz zufrieden.

Ich habe nun ein kleines Problem, bei dem ich nicht weiterkomme. Beim größer zoomen funktioniert alles prima, aber wenn ich bei gedrückter STRG-Taste das Fenster verkleiner, dann kommt plötzlich ein schwarzer Rand, der irgendwann alles verdeckt. Der Inhalt scheint in der richtigen Größer skaliert zu werden .. soweit ich das sehe.

Im Anhang der Problemfall.

Letztlich erstelle ich ein ScaleTransform und setze dies als RenderTransform auf dem Window. Dann verändere ich den ScaleX und ScaleY-Wert entsprechend.

Hat jemand eine Idee, woran das liegen könnte. Bin für jeden Rat dankbar.

Gruß

F
183 Beiträge seit 2009
vor 12 Jahren

Hallo Tomcat,

ich habe es zwar noch nie selbst benutzt, aber ich glaube, das was du suchst ist eine Viewbox.

Viewbox klicke hier

Grüßili

T
tomcat78 Themenstarter:in
5 Beiträge seit 2011
vor 12 Jahren

Hallo fluxy,

eine Viewbox kann meiner Meinung nach nur eine von den beiden Funktionen die ich suche gleichzeitig. Also entweder zoomen oder erweitern.

Gruß

F
183 Beiträge seit 2009
vor 12 Jahren

Hallo Tomcat,

das dürfte richtig sein. Du wirst aber glaube ich nicht drum herumkommen, die Entscheidung selbst zu treffen. Du könntest dir ein Custom ApplicationCommand basteln, um eine Action mit einem MemoricalKey zu verknüpfen. In der Action könntest du das Template eines ContentControls auswechseln. Wäre so eine Idee.

grüße

G
538 Beiträge seit 2008
vor 12 Jahren

Mal als Anmerkung:

Ich weiß zwar nicht, für wen du so ein Programm schreibst, aber es ist doch eher ungewöhnlich bei Windows Programmen, dass der Benutzer beim großziehen eines Fensters STRG drückt um zu Zoomen.

Standard-Verhalten wäre entweder STRG+Mausrad, STRG+[+]oder* und/oder ein kleiner Trackbar rechts unten in einer Statusleiste wie in Word.

Vielleicht solltest du der Benutzererfahrung wegen darüber nachdenken, das Verhalten so abzubilden, wie es andere auch tun.[/color]

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

T
tomcat78 Themenstarter:in
5 Beiträge seit 2011
vor 12 Jahren

@fluxy: Wie gesagt: Eigentlich funktioniert das ganze schon wie gewünscht, aber ich habe halt Probleme mit dem schwarzen Balken der entsteht. Hast du vielleicht eine Idee, woran das liegen könnte?

@Grumbler: Leider kann ich gegen die Kundenanforderung nichts machen. Da muss ich jetzt irgendwie durch 😦

G
538 Beiträge seit 2008
vor 12 Jahren

Sag dem Kunden, was er da will ist komisch 😉

Spass beiseite:

Der Schwarze Balken könnte entstehen, weil das Event welches du abfängst nicht mehr normal verarbeitet wird - also die normale Verarbeitung der Größenänderunge unterbunden wird.
Ich vermute du musst es entweder per Hand nachbilden oder das Event "weiterreichen" ...

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

T
tomcat78 Themenstarter:in
5 Beiträge seit 2011
vor 12 Jahren

Ich werde es dem Kunden ausrichten 😃

Ich hab mich an das Resizingevent wie hier beschrieben
Window Resize Events in .NET 3.5
drangehängt.

Ich bin jetzt bei den WindowMessages nicht so aus, aber ich hatte das so verstanden, dass ich da nicht in die normale Fensterverarbeitung eingreife. Was mich wundert ist, dass das beim vergrößern des Fensters alles prima klappt.

Ich häng nochmal ein Bild an wie es beim Vergrößern aussieht

Gruß