WPF: proponuje nie używać MessageBox-a
Wiele ludzi zastanawia się jak rozwiązać używanie MessageBoxa w wpfie. Ja proponuje ( jeśli to możliwe) wogóle go nie używać.
Zwykły MessageBox jest dosyć ograniczony, mamy do wyboru tylko parę przycisków i obrazków. W samym wpfie dodatkowo dosyć trudno rozwiązać problem otwierania messageboxa z viewmodeli, z reguły owija się go wtedy dodatkową klasą.
W wpfie proponuje zastąpić MessageBoxa przez Adornera z odpowiednią zawartością, który będzie pokazywany w widoku, którego dotyczy komunikat. Przy okazji likwiduje się też wyskakiwanie okienka na wierzch ( może to być zaleta albo wada).

Jedyne utrudnienie polega na tym,że Adorner nie pozwala na określanie swojej zawartości w XAMLu i trzeba tworzyć własną zdziedziczoną kontrolkę. Na szczęście na codeproject można znaleźć ciekawy artykuł, który pokazuje jak stworzyć kontrolkę, którą pozwala na dodanie adornera do określonych kontrolek oraz na zdefiniowanie zawartości w XAMLu:
<ac:AdornedControl IsAdornerVisible="True">
<Grid>
<TextBlock TextWrapping="Wrap">
<TextBlock.Text>
Lorem...
</TextBlock.Text>
</TextBlock>
</Grid>
<ac:AdornedControl.AdornerContent>
<DockPanel>
<DockPanel.Background>
<SolidColorBrush Color="White" Opacity="0.75" />
</DockPanel.Background>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Stretch">
<TextBlock FontWeight="ExtraBold"
Text="Stało się coś złego..."/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<TextBlock Margin="10,0,0,0"><Hyperlink>ponów</Hyperlink></TextBlock>
<TextBlock Margin="10,0,0,0"><Hyperlink>konfiguracja</Hyperlink></TextBlock>
</StackPanel>
<Expander Header="szczegóły">
<TextBlock>
<TextBlock TextWrapping="Wrap">
<TextBlock.Text>
Lorem...
</TextBlock.Text>
</TextBlock>
</TextBlock>
</Expander>
</StackPanel>
</DockPanel>
</ac:AdornedControl.AdornerContent>
</ac:AdornedControl>
Jak ze wszystkim co łamie przyjętą konwencję, trzeba być ostrożnym w stosowaniu podejścia, które prezentuje w tym wpisie, jednak moim zdaniem czasem warto spróbować.
Paweł
24 Mar 10 at 11:42
Ciekawe podejście. Ja do tej pory używałem odpowiednio spreparowanej kontrolki Popup – http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.popup.aspx
Pozdrawiam,
Paweł
Bartłomiej Szafko
24 Mar 10 at 23:03
w sumie bardzo podobne do Twojego – tylko opakowane inną kontrolką
btw można by dodać efekt blur do tła – mogłoby wyglądać jeszcze ciekawiej
migotekm
15 Apr 10 at 18:42
Jeżeli pisana aplikacja może mieć minimalne wymaganie Windows Vista, to polecam zapoznać się z:
http://code.msdn.microsoft.com/VistaBridge