Страницы

Поиск по вопросам

вторник, 20 ноября 2018 г.

WPF. Messagebox. Как поменять стиль диалогового окна?

Стандартный стиль не вписывается в мой дизайн, а вся валидация идет через Messagebox.Show("Сообщение"). Где изменить стиль? Причем надо функционал изменения, как у обычного окна, так как я сделал прозрачный стиль основных окон и использую стилизированные элементы...


Ответ

Никак. MessageBox — системный, он не стилизуется.
Используйте самописный MessageBox, благо там писать не сильно много.
Вот вам пример:
XAML:

Code-behind:
public partial class MessageBox : Window { public MessageBox() { InitializeComponent(); }
void AddButtons(MessageBoxButton buttons) { switch (buttons) { case MessageBoxButton.OK: AddButton("OK", MessageBoxResult.OK); break; case MessageBoxButton.OKCancel: AddButton("OK", MessageBoxResult.OK); AddButton("Cancel", MessageBoxResult.Cancel, isCancel: true); break; case MessageBoxButton.YesNo: AddButton("Yes", MessageBoxResult.Yes); AddButton("No", MessageBoxResult.No); break; case MessageBoxButton.YesNoCancel: AddButton("Yes", MessageBoxResult.Yes); AddButton("No", MessageBoxResult.No); AddButton("Cancel", MessageBoxResult.Cancel, isCancel: true); break; default: throw new ArgumentException("Unknown button value", "buttons"); } }
void AddButton(string text, MessageBoxResult result, bool isCancel = false) { var button = new Button() { Content = text, IsCancel = isCancel }; button.Click += (o, args) => { Result = result; DialogResult = true; }; ButtonContainer.Children.Add(button); }
MessageBoxResult Result = MessageBoxResult.None;
public static MessageBoxResult Show(string caption, string message, MessageBoxButton buttons) { var dialog = new MessageBox() { Title = caption }; dialog.MessageContainer.Text = message; dialog.AddButtons(buttons); dialog.ShowDialog(); return dialog.Result; } }
В результате у вас получается нормальное окно, и вы можете стилизовать его, как вам угодно.


Вам придётся ещё решить проблемы с локализацией, с изменением размеров окна (не стоит давать пользователю возможность максимизировать окно) и т. п.

Комментариев нет:

Отправить комментарий