Laden...

Overlay MessageBox in Parent View legen

Erstellt von Cannon vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.123 Views
C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 11 Jahren
Overlay MessageBox in Parent View legen

Ich habe hier in meinen Views (MVVM) eine Art MessageBox, die keine Fenster öffnet, sondern als "Overlay" über den Rest des Inhalts gelegt wird. Der Hintergrund wird dann abgedunkelt. Das funktioniert wunderbar, da ich im Prinzip den "Dialog" übers ViewModel anzeigen lassen kann.

Allerdings hat die Sache genau einen Haken, nämlich der, dass die einzelnen Views, nicht immer exakt genau so groß wie das Fenster darunter sind und demnach der Dialog immer in der Mitte des Views ist, aber nicht in der Mitte des Fensters. Ist es irgendwie möglich die "Dialoge" zwar über die View anzuzeigen, also quasi den Parent ... sichtbar sollte es aber dennoch über dem aktuellen View sein und die Steuerung sollte auch aus dem aktuellen ViewModel erfolgen.

Ich hoffe es ist überhaupt zu verstehen, was ich meine?

114 Beiträge seit 2009
vor 11 Jahren

Hm, ich glaube da braucht's noch ein paar Hintegrundinfos:
*Arbeitest du an einer Web-Anwendung? *Nutzt die irgendein Framework/Plugin für die Darstellung der Messagebox? *Der Zusammenhang zwischen Fenster und View ist mir nicht klar. Hast du vielleicht einen Screenshot?

So wie sich das anhört, fehlt die doch eigentlich nur die Positionierung anhand der Fenstergröße statt der Viewgröße.

C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 11 Jahren

Keine Web-Anwendung. Ich bin der Thematik auch näher gekommen. Die Basis ist das hier. Speziell geht es da um die MVVM Demo App. Bei mir ist besteht der Workspace nur nicht aus Tabs, sondern es gibt immer nur ein Workspace-Content. Demnach muss der Dialog dort platziert werden.

Was mir gelungen ist den Dialog in dem MainView zu platzieren. Das heißt er legt sich über das gesamte "Fenster". Dazu ist dier Dialog in der MainView plaziert und das Property dazu befindet sich in der Basisklasse, der ViewModels. Was allerdings unmöglich scheint den Dialog aus einem untergeordneten ViewModel sichtbar zu machen. Das heißt der Code wird zwar ausgeführt, aber der Dialog wird nicht angezeigt. Ich verstehe nicht warum, denn der Dialog sollte doch aus allen vererbten ViewModels sichtbar gemacht werden können.

C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 11 Jahren

Ich habe hier nochmal einen Codeschnipsel, um das Problem evtl. zu finden. Meine Vermutung liegt darin, dass der DataContext einfach falsch ist.

<acontrols:WpfMessageBoxView DataContext="{Binding BaseDialog}" OverlayOn="{Binding ElementName=LayoutRoot, Mode=OneWay}" IsShown="{Binding Path=DialogShown}"/>

Der DataContext zeigt dann auf das Property BaseDialog vom Typ WpfMessageBoxViewModel in meinem MainViewModel, welches von meinem WorkspaceViewModel vererbt ist. Der Dialog wird aus dem WorkspaceViewModel gesteuert und angezeigt. Dazu fange ich das Closing-Event ab, welches schon in der App gesetzt wird.

Was aber nicht funktioniert ist das manuelle anzeigen des Dialogs in einem vererbten ViewModel mit dazugehöriger View. Denn theoretisch müsste die gleiche MessageBoxView im MainView genauso über das WorkspaceViewModel angezeigt werden ... das Property ist ja auch in einem weitervererbten WorkspaceViewModel vorhanden .... nur angezeigt wird es nicht. Wieso?