Пользовательский блок сообщений

Возможно ли создать собственный пользовательский MessageBox, где я мог бы добавлять изображения вместо строк?

Мне также нужна эта функция, поэтому я создал WPFCustomMessageBox , клон WPF родного Windows / .NET MessageBox который поддерживает дополнительные функции, такие как текст пользовательской кнопки.

WPFCustomMessageBox использует статические методы, как и стандартный .NET MessageBox, поэтому вы можете подключать и воспроизводить новую библиотеку без изменения кода. Самое главное, я разработал этот элемент управления, чтобы он выглядел идентично исходному MessageBox .

Пример WPFCustomMessageBox

Я создал эту библиотеку, потому что я хотел использовать глаголы для своих кнопок MessageBox, чтобы помочь пользователям лучше понять функциональность кнопок . С помощью этой библиотеки вы можете предложить своим пользователям описание кнопок, таких как Save/Don't Save или Eject Fuel Rods/Don't do it! вместо стандартного OK/Cancel или Yes/No (хотя вы все равно можете использовать их, если хотите).

Ящики сообщений WPFCustomMessageBox возвращают стандартные .NET MessageBoxResults . Он также предлагает те же функции, что и исходные MessageBox такие как MessageBoxIcons и пользовательские заголовки сообщений.

WPFCustomMessageBox является открытым исходным кодом, поэтому вы можете получить код или внести улучшения здесь: https://github.com/evanwon/WPFCustomMessageBox

Вы можете добавить WPFCustomMessage в свой проект через NuGet: https://www.nuget.org/packages/WPFCustomMessageBox/

Проверьте тезисы статей, которые показывают, как создавать пользовательские диалоги с помощью WPF

  • WPF Common TaskDialog для Vista и XP .

alt text http://karlshifflett.files.wordpress.com/2007/12/sampleone.jpg

  • WPF MessageBox – Пользовательский контроль

Вот код, необходимый для создания собственного windows сообщений:

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace MyStuff { public class MyLabel : Label { public static Label Set(string Text = "", Font Font = null, Color ForeColor = new Color(), Color BackColor = new Color()) { Label l = new Label(); l.Text = Text; l.Font = (Font == null) ? new Font("Calibri", 12) : Font; l.ForeColor = (ForeColor == new Color()) ? Color.Black : ForeColor; l.BackColor = (BackColor == new Color()) ? SystemColors.Control : BackColor; l.AutoSize = true; return l; } } public class MyButton : Button { public static Button Set(string Text = "", int Width = 102, int Height = 30, Font Font = null, Color ForeColor = new Color(), Color BackColor = new Color()) { Button b = new Button(); b.Text = Text; b.Width = Width; b.Height = Height; b.Font = (Font == null) ? new Font("Calibri", 12) : Font; b.ForeColor = (ForeColor == new Color()) ? Color.Black : ForeColor; b.BackColor = (BackColor == new Color()) ? SystemColors.Control : BackColor; b.UseVisualStyleBackColor = (b.BackColor == SystemColors.Control); return b; } } public class MyImage : PictureBox { public static PictureBox Set(string ImagePath = null, int Width = 60, int Height = 60) { PictureBox i = new PictureBox(); if (ImagePath != null) { i.BackgroundImageLayout = ImageLayout.Zoom; i.Location = new Point(9, 9); i.Margin = new Padding(3, 3, 2, 3); i.Size = new Size(Width, Height); i.TabStop = false; i.Visible = true; i.BackgroundImage = Image.FromFile(ImagePath); } else { i.Visible = true; i.Size = new Size(0, 0); } return i; } } public partial class MyMessageBox : Form { private MyMessageBox() { this.panText = new FlowLayoutPanel(); this.panButtons = new FlowLayoutPanel(); this.SuspendLayout(); // // panText // this.panText.Parent = this; this.panText.AutoScroll = true; this.panText.AutoSize = true; this.panText.AutoSizeMode = AutoSizeMode.GrowAndShrink; //this.panText.Location = new Point(90, 90); this.panText.Margin = new Padding(0); this.panText.MaximumSize = new Size(500, 300); this.panText.MinimumSize = new Size(108, 50); this.panText.Size = new Size(108, 50); // // panButtons // this.panButtons.AutoSize = true; this.panButtons.AutoSizeMode = AutoSizeMode.GrowAndShrink; this.panButtons.FlowDirection = FlowDirection.RightToLeft; this.panButtons.Location = new Point(89, 89); this.panButtons.Margin = new Padding(0); this.panButtons.MaximumSize = new Size(580, 150); this.panButtons.MinimumSize = new Size(108, 0); this.panButtons.Size = new Size(108, 35); // // MyMessageBox // this.AutoScaleDimensions = new SizeF(8F, 19F); this.AutoScaleMode = AutoScaleMode.Font; this.ClientSize = new Size(206, 133); this.Controls.Add(this.panButtons); this.Controls.Add(this.panText); this.Font = new Font("Calibri", 12F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0))); this.FormBorderStyle = FormBorderStyle.FixedSingle; this.Margin = new Padding(4); this.MaximizeBox = false; this.MinimizeBox = false; this.MinimumSize = new Size(168, 132); this.Name = "MyMessageBox"; this.ShowIcon = false; this.ShowInTaskbar = false; this.StartPosition = FormStartPosition.CenterScreen; this.ResumeLayout(false); this.PerformLayout(); } public static string Show(Label Label, string Title = "", List 

Мне потребовалось 2 дня, чтобы написать. Надеюсь, это работает для тех, кому это нужно.

Я внедрил WPF MessageBox, полностью настраиваемый с помощью стандартных шаблонов управления WPF:

http://blogs.microsoft.co.il/blogs/arik/archive/2011/05/26/a-customizable-wpf-messagebox.aspx

Особенности

  • Класс WPFMessageBox имеет тот же интерфейс, что и текущий class WPF MessageBox.
  • Реализован как настраиваемый элемент управления, который полностью настраивается с помощью стандартных шаблонов управления WPF.
  • Имеет шаблон управления по умолчанию, который выглядит как стандартный MessageBox.
  • Поддерживает все распространенные типы сообщений: ошибка, предупреждение, вопрос и информация.
  • Имеет тот же «звуковой сигнал», что и при открытии стандартного MessageBox.
  • Поддерживает такое же поведение при нажатии кнопки Escape в качестве стандартного MessageBox.
  • Предоставляет такое же системное меню, что и стандартное MessageBox, включая отключение кнопки «Закрыть», когда окно сообщения находится в режиме «Нет».
  • Обрабатывает выровненные по правому краю и справа налево операционные системы, такие же, как и стандартный MessageBox.
  • Обеспечивает поддержку установки windows владельца в качестве элемента управления WinForms.

Конечно. Я сделал это, выполнив подclass System.Windows.Window и добавив способность показывать различные виды контента (изображения, текст и элементы управления), а затем вызывать ShowDialog () в этом окне:

 public partial class MyMessageBox : Window { // perhaps a helper method here public static bool? Show(String message, BitmapImage image) { // NOTE: Message and Image are fields created in the XAML markup MyMessageBox msgBox = new MyMessageBox() { Message.Text = message, Image.Source = image }; return msgBox.ShowDialog(); } } 

В XAML что-то вроде этого:

       

я нуждался в вас, и я нашел этот источник и изменил способ, которым я хотел, и вы могли бы извлечь из него большую выгоду

вот ссылка, введите ссылку здесь, вот как это выглядит по умолчанию введите описание изображения здесь

  • WPF Combobox: различные шаблоны в текстовом поле и выпадающем списке
  • Как Windows 8 Runtime (приложения для WinRT / Windows Store / Windows 10 Universal App) сравниваются с Silverlight и WPF?
  • Как включить виртуализацию пользовательского интерфейса в стандартном WPF ListView
  • Объединить расширитель и сетку (изменяемый размер расширителя)
  • Как получить текущие координаты экрана мыши в WPF?
  • Вызывающий stream должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого в WPF
  • Имеет ли XAML условную директиву компилятора для режима отладки?
  • Создание кнопки изображения + текста с шаблоном управления?
  • В чем разница между свойством зависимостей и прикрепленным свойством в WPF?
  • В чем разница между свойствами Dependency SetValue () и SetCurrentValue ()
  • Получить абсолютное положение элемента внутри windows в wpf
  • Давайте будем гением компьютера.