Autor Beitrag
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Do 28.04.16 10:04 
Hey @ll,

ich habe ein UserControl, welches als Viewport dient. In diesem Viewport sind Panning und Zooming möglich. Ich weiß nicht wie die Komponente aufgebaut ist, jedoch nehme ich an, dass das Zoomen über die Layout- oder RenderTransform stattfindet. In diesem Viewport befinden sich mehrere geschachtelte Containerelemente (z.B. Canvas, Grid, ...). In manchen dieser Containerelementen sind Controls enthalten, die von dem Zoom unbetroffen bleiben sollen (z.B. Textblöcke um Metainformationen anzuzeigen).
Ich habe mir bisher zwei mögliche Ansätze:
1. Die Transform, die den Zoom verursacht nach außen (z.B. als Eigenschaft des besagten Viewport) weiterleiten und auf die nichtzuskalierenden Controls invertiert anwenden.
2. Auf Stackoverflow gibt es ein paar Ansätze die mit Adorner arbeiten.

Die Frage ist nun wie löse ich mein Problem möglichst elegant bzw. wie löse ich es überhaupt?

//Edit
Habe gerade noch einen Crossthread auf Stackoverflow eröffnet.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Schafschaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 63
Erhaltene Danke: 2

Windows 10
C# (VS 2015)
BeitragVerfasst: Do 28.04.16 13:37 
Kannst du die Child Elemente die vom Zoom nicht betroffen sein sollen nicht aus dem Zoom Control rausnehmen und drüberlegen?
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Do 28.04.16 14:32 
Theoretisch wäre es denkbar, aber dann habe ich die Anzeige der Metadaten von dem betreffenden Objekt abgekoppelt. Außerdem müsste ich das Panning dann noch berücksichtigen. Ich habe jetzt mal eine Lösung implementiert.
Der Viewport stellt eine Eigenschaft "ContentScale" zur Verfügung (inklusive Changed-Event). Ich habe für die Controls im Viewport eine Klasse als Datenkontext angelegt. Dieser Datenkontext besitzt eine "Scale"-Eigenschaft, die ich immer bei dem Changed-Event aktualisiere. An diese Scale-Eigenschaft ist dann eine ScaleTransform gekoppelt, die wiederum an das Grid gebunden ist, dass die Metadatan enthält.

Ich lasse den Status mal noch offen, falls jemand eine andere Idee hat.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler