Entwickler-Ecke
WPF / Silverlight - Eine View über anderen schweben lassen
doublecross - Mi 06.04.16 15:03
Titel: Eine View über anderen schweben lassen
Hallo,
ich habe eine MVVM Anwendung und in einer View werden viele andere als Items (die meisten Stellen Diagramme und Grafiken dar) in einem Item Control datgestellt (
ChildViews ist eine
ObservableCollection<ViewModelBase>):
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| <ItemsControl ItemsSource="{Binding ChildViews}" ScrollViewer.PanningMode="VerticalFirst"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel IsItemsHost="True" /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemContainerStyle> <Style> <Setter Property="FrameworkElement.Margin" Value="5"/> <Setter Property="FrameworkElement.Height" Value="330"/> <Setter Property="FrameworkElement.Width" Value="450"/> </Style> </ItemsControl.ItemContainerStyle> </ItemsControl> |
So erscheinen alle Ansichten in kleinen Kacheln wenn nicht alle nebeneinander passen wird in der nächsten Zeile weitergemacht und wenn es zu viele Werden erscheint ein Scrollbar. Soweit so gut.
Da aber die Details auf so einer kleinen Kachel nicht immer gut zu erkennen sind, möchte ich die Möglichkeit bieten jeweils eine Einzelne Kachel zu vergrößern. Natürlich könnte ich ein Command gestalten, welches ein Item (ViewModel) als Parameter erhält und dann dieses anstelle der Haupt (übersichts-) View anzeigt. Allerdings wäre es super wenn ich das ganze noch "schön" hin bekäme. Ich stelle es mir so vor, wie man es zuweilen in Bilder Galerien auf Webseiten sieht. Ich möchte auf eine Kachel (oder einem Zoom Knopf auf dieser) klicken, diese soll sich dann größer Zoomen und Zentriert über den anderen Kacheln schweben. Ein bisschen so wie
hier [
http://www.lokeshdhakar.com/projects/lightbox2/#examples], wenn man das erste Bild öffnet nur eben ausgehend von der angeklickten Kachel.
Die Einzige Idee die ich hätte wäre es eine neue, Rahmenlose, Form mit dem Inhalt der Kachel zu erstellen, diese unsichtbar über der Kachel zu Positonieren, Sichtbar zu machen und dann ein Wenig Zauber damit zu betreiben. Allerdings hört sich das für mich so gar nicht nach WPF an, und ich komme wahrscheinlich nur deshalb darauf, weil ich zu viel mit "Altmodischen" Oberflächenmodellen gearbeitet habe.
Daher meine Frage an euch: Wie würdet ihr das machen? Wie geht es "elegant" in WPF?
Danke schon einmal
Palladin007 - Mi 06.04.16 19:46
Die meiner Meinung nach einfachste Variante (weil ich sie kenne) wäre, wenn Du alles in ein Grid legst.
Wenn Du in dieses Grid zwei Controls rein legst, werden die übereinander dargestellt, das Zweite vor dem Ersten.
Wenn das Zweite deine normale Ansicht ist und das Erste leicht grauen Hintergrund hat und darin groß deine Kachel darstellt, hast Du was Du haben willst.
Die andere und deutlich flexiblere Variante sind Adorners.
Das sind Elemente, die völlig unabhängig gerendert werden, nicht im VisualTree liegen und über deiner UI angezeigt werden. Darüber könntest Du z.B. bei einem Drag$Drop-Vorgang permanent das gedraggte Element unter der Maus anzeigen lassen.
Probleme kann es hier geben, weil es nicht im VisualTree liegt und das DataBinding nicht so reibungslos funktioniert, wie Du es kennst. Das ist das gleiche Problem wie beim ContextMenu, das lässt sich aber mit einem
BindingProxy [
http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/] recht einfach lösen.
Damit habe ich bisher aber nichts gemacht, nur theoretisch gelesen, daher kann ich das nur als Idee in den Raum werfen.
doublecross - Do 07.04.16 09:30
Hallo
Palladin007,
danke für deine Antwort. Ich glaube dein erster Vorschlag entspricht inetwa dem was ich gester Abend noch in
diesem Beitrag [
http://wpf.2000things.com/tag/zindex/] über das ZIndex Property gelesen habe. Das wäre ein gangbarer Weg. Ich werde mir aber auf jeden Fall auch einmal Adorners ansehen, um abzuwägen was besser zu meinem Vorhaben passt.
Ich lasse das Thema hier in der Hoffnung auf weitere Vorschläge oder Erfahrungsberichte zu den genannten Themen, noch offen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!