Чтобы вместо стандартного MessageBox в приложении WPF использовать более современное и «красивое» окно, можно использовать средства самой Windows. Напишем класс-помощник, который будет выводить диалоговое окно, используя системную библиотеку comctl32.dll.
Imports System.Runtime.InteropServices
''' <summary>
''' "Красивое" диалоговое окно.
''' </summary>
Public Module TaskDialogHelper
<DllImport("comctl32.dll", CharSet:=CharSet.Unicode, PreserveSig:=False)>
Public Function TaskDialog(hwndParent As IntPtr, hInstance As IntPtr, title As String, mainInstruction As String, content As String, buttons As TaskDialogButtons, icon As TaskDialogIcon) As TaskDialogResult
End Function
Public Enum TaskDialogResult As Integer
Ok = 1
Cancel = 2
Retry = 4
Yes = 6
No = 7
Close = 8
End Enum
<Flags>
Public Enum TaskDialogButtons As Integer
Ok = &H1
Yes = &H2
No = &H4
Cancel = &H8
Retry = &H10
Close = &H20
End Enum
Public Enum TaskDialogIcon As Integer
Shield = 65532
Information
[Error]
Warning
End Enum
End Module
Также в манифесте проекта необходимо раскомментировать следующий участок:
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
Использовать код можно таким образом:
Dim dr = TaskDialogHelper.TaskDialog(New System.Windows.Interop.WindowInteropHelper(Me).Handle,
IntPtr.Zero,
"Лаконичный заголовок окна",
"Здесь будет основной текст сообщения.",
"А здесь вспомогательный.",
TaskDialogHelper.TaskDialogButtons.Yes Or TaskDialogHelper.TaskDialogButtons.No,
TaskDialogHelper.TaskDialogIcon.Information)
Желательно также при выводе данного окна проверять версию операционной системы: данное окно можно использовать в Windows Vista и более современных (версия больше 6):
If (System.Environment.OSVersion.Version.Major >= 6) Then
…