Autor Beitrag
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Mi 06.04.16 15:03 
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>):

ausblenden 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, 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: 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 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Do 07.04.16 09:30 
Hallo user profile iconPalladin007,

danke für deine Antwort. Ich glaube dein erster Vorschlag entspricht inetwa dem was ich gester Abend noch in diesem Beitrag ü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.
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 07.04.16 17:20 
Hey.

Also was mir noch spontan einfällt wäre Kacheln die sich vergrößern wenn sie den Fokus besitzen. Das wird beim Cairo Dock so gemacht (guckst du hier)

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