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ß
Hallo Tomcat,
ich habe es zwar noch nie selbst benutzt, aber ich glaube, das was du suchst ist eine Viewbox.
Grüßili
Hallo fluxy,
eine Viewbox kann meiner Meinung nach nur eine von den beiden Funktionen die ich suche gleichzeitig. Also entweder zoomen oder erweitern.
Gruß
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
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)
@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 😦
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)
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ß