Entwickler-Ecke
WPF / Silverlight - MessageBox in der Mitte des Parent-Fensters platzieren
relapse - Fr 08.06.12 12:41
Titel: MessageBox in der Mitte des Parent-Fensters platzieren
Hi,
meine Frage ist: Wie kann ich eine MessageBox (erzeugt von einem UserControl) in der Mitte des Parent-Fensters (von diesem UserControl) platzieren?
Danke!
Ralf Jansen - Fr 08.06.12 12:56
Gibt die von .NET gekapselte MessageBox nicht so einfach her.
2. Möglichkeiten. Eine eigene MessageBox schreiben mit diesem Feature oder ein MessageHook auf das Aktivieren einer MessageBox setzen (SetWindowsHookEx auf HCBT_ACTIVATE) und in der MessageHookProc dann das Fenster passend verschieben (Da wir keine .NET Fenster haben vermutlich via MoveWindow API).
Christoph1972 - Fr 08.06.12 13:31
Ich würde mir eine eigen MSGBox erstellen, dann hast du die Properties von der WinForm.
relapse - Fr 08.06.12 13:46
Oh-oh. Ich dachte das wird wesentlich einfacher. Ich hab' in meinem UserControl (übrigens ein WindowsFormsHost) Folgendes versucht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| DependencyObject ucParent = this.Parent;
while (!(ucParent is Window)) { ucParent = LogicalTreeHelper.GetParent(ucParent); }
var fenster = (IWin32Window)ucParent; InstanzEinerAnderenKlasse.ShowMessageBox(fenster, "Test!"); |
Ich bekomme aber (natürlich :D ) die Exception. Kann man denn irgendwie auf das Handle via diese ucParent-Variable zugreifen???
Ralf Jansen - Fr 08.06.12 13:59
Der IWin32Window Parameter wird beim MessageBox Show nur für die Z-Order benutzt. Heißt das die auch MessageBox garantiert vor diesem Fenster angezeigt wird. Aber nicht wo vor diesem Fenster. Wenn ein Window ein IWin32Window wäre würde dir das also auch nicht helfen.
Warum benutzt du die Winforms Message Box in einer WPF Applikation? WPF hat eine eigene (System.Windows.MessageBox). Die man aber genauso wenig frei auf dem Monitor platzieren kann.
relapse - Fr 08.06.12 14:50
Zitat: |
Warum benutzt du die Winforms Message Box in einer WPF Applikation? WPF hat eine eigene (System.Windows.MessageBox). Die man aber genauso wenig frei auf dem Monitor platzieren kann.
|
Schande! Ich hab's gar nicht gemerkt mit WPF-eigener MessageBox (einfach dumm den ersten Vorschlag von ReSharper übernommen)! Die lässt sich doch mittig zum Parent-Fenster platzieren! Ich übergebe dem UserControl bei seiner Initialisierung in EventHandler _Loaded des View (MVVM) den Verweis vom Typ "Window" auf das View. Dieser Verweis wird dann in einer Property von UserControl abgespeichert und bei Bedarf an die andere Klasse (Error-Handler) weitergeleitet:
C#-Quelltext
1: 2: 3: 4:
| public static void ShowMessage(Window fenster, string meldung) { System.Windows.MessageBox.Show(fenster, meldung, "Demo"); } |
Und schon funktioniert alles. Danke!
Ralf Jansen - Fr 08.06.12 15:16
Das ist unerwartet. Bist du dir sicher das die MessageBox nicht doch einfach CenterScreen angezeigt wird?
relapse - Fr 08.06.12 15:22
Absolut, da ich zwei Bildschirme habe. Sonst sah ich die Messabox immer in der Mitte vom Hauptbildschirm, obwohl mein View auf dem zweiten Bildschirm war. Ich muss mich aber korrigieren: Die MessageBox erscheit in der Mitte des UserControl, und nicht in der Mitte des gesamten Fensters.
relapse - Fr 08.06.12 15:29
Und doch zu schnell geantwortet! Leider doch nicht in der Mitte des Fensters/UserControl, sondern lediglich in der Mitte des Bildschirms, aber zumindest auf dem richtigen Bildschirm (da, wo das Hauptfenster erscheint) 8)
Tja... Hab' mich schon soooo gefreut... Man kann halt nicht alles haben :lol:
Ralf Jansen - Fr 08.06.12 15:55
Soviel zur Relativität von Absolut ;)
relapse - Fr 08.06.12 16:14
8)
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!