Стандартный стиль не вписывается в мой дизайн, а вся валидация идет через 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;
}
}
В результате у вас получается нормальное окно, и вы можете стилизовать его, как вам угодно.
Вам придётся ещё решить проблемы с локализацией, с изменением размеров окна (не стоит давать пользователю возможность максимизировать окно) и т. п.
Комментариев нет:
Отправить комментарий