Ich habe ein WPF UserControl, das wie ein Viewport fungiert (ich nenne es "Ansichtsfenster" in dem folgenden Kontext). In diesem Ansichtsfenster kann der Inhalt vergrößert und verkleinert werden (ich glaube, beim Zoomen wird entweder der Layout- oder RenderTransform-Befehl verwendet, um den Inhalt zu vergrößern). Grundsätzlich ist der Inhalt nur ein Canvas. Dieser Canvas enthält einige Formen und einige TextBoxen, die zum Anzeigen von Metadaten der Formen verwendet werden. Wenn der Zoomfaktor 1 ist alles in Ordnung, aber wenn ich verkleinern, schrumpft die Leinwand und auch die TextBoxen, die die Metadaten unlesbar, weil der Text so klein ist.Unscaled Steuerelemente in skalierten Eltern
Wie kann ich die TextBoxen zum Gegen-Zoom zwingen, so dass sie ihre Größe auf dem Bildschirm nicht ändern?
Ich habe darüber nachgedacht, die Transformation des Ansichtsfensters (das den Zoom verursacht) an die TextBoxen (irgendwie) zu übergeben und ihre Umkehrung darauf anzuwenden, aber das scheint mir falsch zu sein. Eine andere Möglichkeit ist die Verwendung von Adorner, das die TextBoxen enthält. Ich habe ein Thema über Adorners mit Controls here on Stackoverflow gefunden, aber ich bin nicht sicher, ob dieser Ansatz besser ist als der andere.
Also wenn jemand eine bessere Lösung bekommen würde, würde ich es begrüßen.
Vielen Dank im Voraus
Das Problem ist, dass der Inhalt des Ansichtsfensters skaliert werden sollte. Aber der Inhalt des Inhalts sollte nicht skaliert werden. Ich habe es gelöst, indem ich eine Klasse erstellt habe, die als Datenkontext verwendet wird. Diese Klasse enthält eine Eigenschaft, die ein Double speichert, das die Skalierung darstellt. Das Ansichtsfenster hat eine Eigenschaft "ContentScale" und ein entsprechend geändertes Ereignis. Also verbinde ich die ContentScale im Grunde mit meinem Datenkontext, der wiederum an das Steuerelement gebunden ist, das unskaliert werden soll. Im Control konvertiere ich das Double in eine ScaleTransform (1/ContentScale für x und y). – Timo
Ich glaube, ich habe dich richtig verstanden - Bindung an deine Eltern Die Inverse-Eigenschaft von transform sollte dir genau den gleichen Effekt geben wie das, was du jetzt manuell machst. Alles in Ihrem Ansichtsfenster wird weiterhin wie erwartet skaliert, mit Ausnahme aller untergeordneten Elemente, auf die Sie ViewPort.RenderTransform.Inverse explizit anwenden. Wie auch immer, froh, dass es funktioniert hat. – wilford
Ja verbindlich die Transformation würde die Dinge einfacher machen, aber wie gesagt ich bin mir nicht ganz sicher, ob eine der Transformationen tatsächlich verwendet wird und das Ansichtsfenster eine Blackbox ist. Aber danke für deine Hilfe. – Timo